Summary: | Невозможно совместное использование системных и пользовательских файлов | ||||||
---|---|---|---|---|---|---|---|
Product: | Sisyphus | Reporter: | serpiph <serpiph> | ||||
Component: | systemd | Assignee: | 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
serpiph
2012-05-28 10:14:10 MSK
Покажите свой .service файл. И свои юниты нужно класть в /etc/systemd/system, директории /etc/systemd/system/multi-user.target быть не должно, всё что требуется для загрузки к таргету systemd сам создаст ссылки в .wants директории. Прошу прощения, я свой скрипт клал в каталог /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. Пришлось запинывать оригинальный... Вечером ещё раз повызываю systemctl. Может чего чего напутал при его вызове. Но разное поведение программы при наличии и отсутствии файла /lib/systemd/system/transmission-daemon.service всё равно непонятно. Вс работает. 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' Сделайте по инструкции. Вчера опробовал. Действительно, если скопировать файл 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, то после запуска программа продолжает работать. Давайте по порядку. Почистите систему от ваших экспериментов, возможно где-то остались остатки юнитов. 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. Смотрим в логи. Вывод всех команды показываем. 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 этот файл или нет.... Created attachment 5476 [details]
Установленные пакеты
Кстати, сам systemd требует команду 'systemctl --system daemon-reload', а Вы предлагаете без --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 # 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 # В таком режиме не реагирует на наличие или отсутствие /lib/systemd/system/transmission-daemon.service. В смысле нет останова. P.S. К сожалению, срочно отправляют в командировку, некоторое время не смогу отвечать. Если ничего не прояснится, можете закрыть ошибку, я буду пробовать разобраться уже после возвращения. (В ответ на комментарий №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 и демон не понимает, что следить нужно за форком. Спасибо Mike. У меня больше добавить нечего. |