Bug 27374

Summary: Невозможно совместное использование системных и пользовательских файлов
Product: Sisyphus Reporter: serpiph <serpiph>
Component: systemdAssignee: Alexey Shabalin <shaba>
Status: CLOSED NOTABUG QA Contact: qa-sisyphus
Severity: blocker    
Priority: P3 CC: amike, arseny, icesik, shaba
Version: unstable   
Hardware: all   
OS: Linux   
Attachments:
Description Flags
Установленные пакеты none

Description serpiph 2012-05-28 10:14:10 MSK
Я использую transmission-daemon со своими настройками, в частности, под другим пользователем и группой. Для этого пришлось создать свой transmission-daemon.service файл. Я его положил в каталог /etc/systemd/system/multi-user.target согласно документации на systemd. Но его использование невозможно, если в каталоге /lib/systemd/system лежит такой же файл из пакета. При попытке дать команду 'systemctl start transmission.daemon' программа поднимается, а потом сразу же идёт команда от systemd на останов. В выводе команды 'systemctl status transmission.daemon' идут строки вида 'Active: deactivating (stopping)...', а потом 'Active: inactive (stopped/dead)...'


Если же системный файл удалить и дать команду 'systemctl --system daemon-reload', то всё становится на свои места: программа запускается и работает.

Я считаю, что это critical или blocker, так как порой администраторы настраивают сервисы под себя, а это ограничение больно бьет по рукам, так как первое же обновление пакета сломает запуск сервиса.
Comment 1 Mike 2012-05-28 22:13:35 MSK
Покажите свой .service файл.
И свои юниты нужно класть в /etc/systemd/system, директории /etc/systemd/system/multi-user.target быть не должно, всё что требуется для загрузки к таргету systemd сам создаст ссылки в .wants директории.
Comment 2 serpiph 2012-05-29 09:46:54 MSK
Прошу прощения, я свой скрипт клал в каталог /etc/systemd/system/multi-user.target.wants, в каталог /etc/systemd/system, /etc/systemd/user. Файл .service я взял родной у transmission-daemon и подправил:
=================
[Unit]
Description=A fast and easy BitTorrent client
After=network.target

[Service]
EnvironmentFile=/etc/sysconfig/transmission-daemon
PermissionsStartOnly=true
ExecStart=/usr/bin/transmission-daemon -f $TRANSMISSION_OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
User=torrent
Group=torrent
Restart=always

[Install]
WantedBy=multi-user.target
==================
Что же до ссылок в /etc/systemd/system/multi-user.target.wants, то куда бы я ни клал свой файл в подкаталоги /etc/systemd, команда 'systemctl enable transmission-daemon.service' упорно направляла ссылку на /lib/systemd/system/transmission-daemon.service. Пришлось запинывать оригинальный...
Comment 3 serpiph 2012-05-29 10:00:58 MSK
Вечером ещё раз повызываю systemctl. Может чего чего напутал при его вызове. Но разное поведение программы при наличии и отсутствии файла /lib/systemd/system/transmission-daemon.service всё равно непонятно.
Comment 4 Mike 2012-05-30 03:05:57 MSK
Вс работает.
1. 
# file /etc/systemd/system/test.service
/etc/systemd/system/test.service: ASCII text

2. 
# systemctl enable test.service
ln -s '/lib/systemd/system/test.service' '/etc/systemd/system/multi-user.target.wants/test.service'

3. 
# cp /lib/systemd/system/test.service /etc/systemd/system/

4. Меняем /etc/systemd/system/test.service юнит.
5.
# systemctl enable test.service                                                                                      
rm '/etc/systemd/system/multi-user.target.wants/test.service'                                                                                                
ln -s '/etc/systemd/system/test.service' '/etc/systemd/system/multi-user.target.wants/test.service'

Сделайте по инструкции.
Comment 5 serpiph 2012-05-30 09:39:05 MSK
Вчера опробовал. Действительно, если скопировать файл transmission-daemon.service в /etc/systemd/system, изменить, а потом скомандовать 'systemctl enable transmission-daemon.service', то подхватится именно из /etc/systemd/system. 

Проблема далее: наберите 'systemctl start transmission-daemon.service', а потом смотрите в логах (кстати, в этом файле оказался баг, программе нельзя передавать флаг '-f', бага #27382). В логах будет запуск программы и тут же её останов (причём успешный). Команда 'systemctl status transmission-daemon.service' сразу после команды запуска сообщает о процессе остановки программы, то есть это именно systemd скомандовал остановку. Если удалить файл /lib/systemd/system/transmission-daemon.service, то после запуска программа продолжает работать.
Comment 6 Mike 2012-05-30 21:41:36 MSK
Давайте по порядку. Почистите систему от ваших экспериментов, возможно где-то остались остатки юнитов.

1. Загружаемся и показываем "systemctl status transmission-daemon.service",
надеюсь вы его не меняли.

2. Копируем файл, меняем, показываем.
Делаем "systemctl enable transmission-daemon.service" и 
"systemctl daemon-reload"

3. Если transmission-daemon был запущен, делаем "systemctl restart transmission-daemon.service" или stop/start.

4. Смотрим в логи.

Вывод всех команды показываем.
Comment 7 serpiph 2012-06-03 22:55:59 MSK
1. Проверил
# systemctl status transmission-daemon.service
transmission-daemon.service - A fast and easy BitTorrent client
          Loaded: loaded (/lib/systemd/system/transmission-daemon.service; disabled)
          Active: inactive (dead)
          CGroup: name=systemd:/system/transmission-daemon.service
#

2.
# systemctl enable transmission-daemon.service
ln -s '/etc/systemd/system/transmission-daemon.service' '/etc/systemd/system/multi-user.target.wants/transmission-daemon.service'                                                                                                
[root@pif system]# systemctl daemon-reload                                                                                                                                                                                       
[root@pif system]#cat /etc/systemd/system/transmission-daemon.service
[Unit]
Description=A fast and easy BitTorrent client
After=network.target syslog.target

[Service]
EnvironmentFile=/etc/sysconfig/transmission-daemon
PermissionsStartOnly=true
ExecStart=/usr/bin/transmission-daemon
#ExecStart=/usr/bin/transmission-daemon -f $TRANSMISSION_OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
StandartOutput=syslog
User=torrent
Group=torrent
Restart=always
KillMode=process

[Install]
WantedBy=multi-user.target
#

3.# systemctl start transmission-daemon.service
# systemctl status transmission-daemon.service
transmission-daemon.service - A fast and easy BitTorrent client
          Loaded: loaded (/etc/systemd/system/transmission-daemon.service; enabled)
          Active: inactive (dead) since Sun, 03 Jun 2012 22:41:28 +0400; 8s ago
         Process: 27003 ExecStart=/usr/bin/transmission-daemon (code=exited, status=0/SUCCESS)
          CGroup: name=systemd:/system/transmission-daemon.service
                  └ 27004 /usr/bin/transmission-daemon
#
В логах программа работает (её pid виден в выше).
# cat /etc/sysconfig/transmission-daemon
TRANSMISSION_OPTIONS="-e /var/log/transmission-daemon/transmission-daemon.log -g /var/lib/transmission-daemon"

Хм, что-то непонятное стало в датском королевстве... После обновления характер изменился. Теперь программа вместо останова всегда сигнализирует, что она остановлена, но при этом значится, что она работает... Список обновлений я приложу в следующем сообщении. Причём неважно, есть ли в /lib/systemd/system этот файл или нет....
Comment 8 serpiph 2012-06-03 22:59:08 MSK
Created attachment 5476 [details]
Установленные пакеты

Кстати, сам systemd требует команду 'systemctl --system daemon-reload', а Вы предлагаете без --system. В чём подвох?
Comment 9 serpiph 2012-06-03 23:16:50 MSK
#cat /etc/systemd/system/transmission-daemon.service
[Unit]
Description=A fast and easy BitTorrent client
After=network.target syslog.target

[Service]
EnvironmentFile=/etc/sysconfig/transmission-daemon
PermissionsStartOnly=true
#ExecStart=/usr/bin/transmission-daemon
ExecStart=/usr/bin/transmission-daemon -f $TRANSMISSION_OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
StandartOutput=syslog
User=torrent
Group=torrent
Restart=always
KillMode=process

[Install]
WantedBy=multi-user.target
# cat /etc/sysconfig/transmission-daemon
TRANSMISSION_OPTIONS="-e /var/log/transmission-daemon/transmission-daemon.log -g /home/torrent/.config/transmission-daemon"
# systemctl status transmission-daemon.service
transmission-daemon.service - A fast and easy BitTorrent client
          Loaded: loaded (/etc/systemd/system/transmission-daemon.service; enabled)
          Active: active (running) since Sun, 03 Jun 2012 23:10:53 +0400; 1min 28s ago
        Main PID: 27683 (transmission-da)
          CGroup: name=systemd:/system/transmission-daemon.service
                  └ 27683 /usr/bin/transmission-daemon -f -e /var/log/transmission-daemon/transmission-daemon.log -g /home/torrent/.config/transmission-daemon

#
Comment 10 serpiph 2012-06-03 23:20:42 MSK
В таком режиме не реагирует на наличие или отсутствие
/lib/systemd/system/transmission-daemon.service. В смысле нет останова.

P.S. К сожалению, срочно отправляют в командировку, некоторое время не смогу
отвечать. Если ничего не прояснится, можете закрыть ошибку, я буду пробовать
разобраться уже после возвращения.
Comment 11 Mike 2012-06-04 18:12:04 MSK
(В ответ на комментарий №7)

> [Service]
> EnvironmentFile=/etc/sysconfig/transmission-daemon
> PermissionsStartOnly=true
> ExecStart=/usr/bin/transmission-daemon
> #ExecStart=/usr/bin/transmission-daemon -f $TRANSMISSION_OPTIONS
> ExecReload=/bin/kill -HUP $MAINPID

> Хм, что-то непонятное стало в датском королевстве... После обновления характер
> изменился. Теперь программа вместо останова всегда сигнализирует, что она
> остановлена, но при этом значится, что она работает... Список обновлений я
> приложу в следующем сообщении. Причём неважно, есть ли в /lib/systemd/system
> этот файл или нет....

Вы редактируете .service файл, не понимая сути. 
Если убрали параметр "-f", тогда выставите принудительно Type=forking.
Сейчас работает simply и демон не понимает, что следить нужно за форком.
Comment 12 Alexey Shabalin 2012-06-13 16:46:29 MSK
Спасибо Mike. У меня больше добавить нечего.