Bug 56724

Summary: Долгое выключение или перезагрузка из-за службы localsearch
Product: Альт Рабочая станция Reporter: Михаил <mephist2004>
Component: Ошибки работыAssignee: Semen Fomchenkov <armatik>
Status: NEW --- QA Contact: qa-p8 <qa-p8>
Severity: normal    
Priority: P5 CC: antohami, kullibbin
Version: 11.1   
Hardware: x86_64   
OS: Linux   

Description Михаил 2025-11-04 22:50:49 MSK
Система долго выключается или перезагружается (почти минуту). 
Анализ логов показывает:

ноя 04 20:38:21 Desktop-Home systemd[1333]: Stopping localsearch-3.service - Tracker file system data miner...
ноя 04 20:39:06 Desktop-Home systemd[1333]: localsearch-3.service: State 'stop-sigterm' timed out. Killing.
ноя 04 20:39:06 Desktop-Home systemd[1333]: localsearch-3.service: Killing process 2499 (localsearch-3) with signal SIGKILL.
ноя 04 20:39:06 Desktop-Home systemd[1333]: localsearch-3.service: Killing process 2510 (n/a) with signal SIGKILL.
ноя 04 20:39:06 Desktop-Home systemd[1333]: localsearch-3.service: Killing process 2543 (Monitor thread) with signal SIGKILL.
ноя 04 20:39:06 Desktop-Home systemd[1333]: localsearch-3.service: Main process exited, code=killed, status=9/KILL
ноя 04 20:39:06 Desktop-Home systemd[1333]: localsearch-3.service: Failed with result 'timeout'.
ноя 04 20:39:06 Desktop-Home systemd[1333]: Stopped localsearch-3.service - Tracker file system data miner.
ноя 04 20:39:06 Desktop-Home systemd[1333]: localsearch-3.service: Consumed 50.519s CPU time, 2.1G memory peak.

Видно, что процесс, отвечающий за индексацию/поиск не может корректно завершиться и принудительно убивается через 45 секунд.

Проблему выявил в конфликте зависимостей:
systemctl --user list-dependencies localsearch-3.service
localsearch-3.service
● ├─background.slice
● ├─dbus.socket
● └─basic.target
●   ├─systemd-tmpfiles-setup.service
●   ├─paths.target
●   ├─sockets.target
●   │ ├─dbus.socket
●   │ ├─pipewire-pulse.socket
●   │ └─pipewire.socket
●   └─timers.target
●     └─systemd-tmpfiles-clean.timer

systemctl --user show localsearch-3.service -p Requires,After,Before,Wants
Requires=basic.target dbus.socket background.slice
Wants=
Before=shutdown.target
After=home.mount -.mount basic.target gnome-session.target dbus.socket background.slice

systemctl --user show localsearch-3.service -p Conflicts
Conflicts=shutdown.target

Что изменил:
systemctl --user edit localsearch-3.service

[Unit]
# Убираем конфликт с shutdown.target
Conflicts=

# Указываем явные зависимости для корректной остановки
Before=gnome-session-shutdown.target
After=dbus.socket
Wants=dbus.socket

[Service]
# Гарантируем корректную обработку сигналов
KillMode=process
TimeoutStopSec=30
SendSIGKILL=no

А было так:
### /usr/lib/systemd/user/localsearch-3.service
# [Unit]
# Description=Tracker file system data miner
# ConditionUser=!root
# ConditionUser=!gnome-initial-setup
# After=gnome-session.target
# 
# [Service]
# Type=dbus
# BusName=org.freedesktop.LocalSearch3
# ExecStart=/usr/libexec/localsearch-3
# Restart=on-failure
# # Don't restart after tracker daemon -k (aka tracker-control -k)
# RestartPreventExitStatus=SIGKILL
# Slice=background.slice
# 
# [Install]
# WantedBy=gnome-session.target

Проблема: Systemd пытался остановить службы в порядке, обратном запуску. Но localsearch-3 зависела от gnome-session.target, который уже был остановлен к моменту остановки localsearch-3.

Получается, что были неправильно настроены зависимости. После внесения мной исправлений (см. выше), все стало работать быстро и корректно, служба localsearch-3 теперь завершается менее, чем за 1 секунду.

Прокомментируйте, пожалуйста, данную ситуацию и мое решение, а также на что еще обратить внимание в настройках дистрибутива?
Comment 1 Антон Мидюков 2025-11-05 07:43:09 MSK
(Ответ для Михаил на комментарий #0)
> # Убираем конфликт с shutdown.target
> Conflicts=

Это ни на что не влияет.

> 
> # Указываем явные зависимости для корректной остановки
> Before=gnome-session-shutdown.target

Вероятно, помогло это. Сделайте только это изменение и проверьте.

> After=dbus.socket
> Wants=dbus.socket

Сервис нужно выключать при завершении сеанса gnome. А вот это происходит сильно позже.