Новомодный сценарий для демона передачи, выполняемого как обычный пользователь

Я сделал сценарий для запуска демона передачи как обычного пользователя:

start on filesystem
stop on runlevel [!2345]

respawn
respawn limit 10 5

pre-start script
    test -x /usr/bin/transmission-daemon || { stop; exit 0; }
    test -d /home/user/.config/transmission-daemon || { stop; exit 0; }
end script

exec su -l -c 'transmission-daemon --foreground --config-dir /home/user/.config/transmission-daemon --logfile /home/user/.config/transmission-daemon/daemon.log' user

Этот сценарий работает, но я вижу два процесса в казни демона передачи:

user     5041  0.0  0.0  48556  1516 ?        Ss   01:10   0:00 su -l -c transmission-daemon --foreground --config-dir /home/user/.config/transmission-daemon --logfile /home/user/.config/transmission-daemon/daemon.log user
user     5048  0.5  0.0 150432  2960 ?        Sl   01:10   0:00 transmission-daemon --foreground --config-dir /home/user/.config/transmission-daemon --logfile /home/user/.config/transmission-daemon/daemon.log

Это корректно? Там другой путь состоит в том, чтобы выполнить это лучше?

Примечание: Сценарий запуска по умолчанию пакета передачи отключен.

Подробнее:

Если я выполняю передачу как демон (без foreground) проблемой является обнаруженный PID init:

start on filesystem
stop on runlevel [!2345]

expect fork

pre-start script
    test -x /usr/local/bin/transmission-daemon || { stop; exit 0; }
    test -d /home/mario/.config/transmission-daemon || { stop; exit 0; }
end script

exec sudo -u user transmission-daemon --config-dir /home/user/.config/transmission-daemon --logfile /home/user/.config/transmission-daemon/daemon.log

.

$ sudo initctl list | grep trans
trans-test start/running, process 3110

но действительно это - PID sudo (законченный процесс), демон передачи, PID - другой:

$ ps aux 
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
user     3148  0.0  0.0 154848  2708 ?        Ssl  13:33   0:00 transmission-daemon 
4
задан 8 July 2011 в 16:24

4 ответа

Когда Вы запускаете приложение с su -c, su будет ожидать приложения для завершения. В Вашем случае, добавив --foreground опция, сделайте передачу для не отсоединения от ее родителя. Таким образом, Вы будете видеть su как родительский процесс transimssion-daemon для все время последних жизней.

При удалении той опции Вы будете видеть это su процесс завершится как только transmission-daemon переходит к фону.

Кроме удаления той опции, которая кажется несвоевременной для сервиса, я предлагаю использовать

sudo -u <your-user> app-name options

вместо su, быть больше близко к Ubuntu способ сделать вещи и быть более простым управлять опциями без потребности использовать одинарные кавычки.

1
ответ дан 1 December 2019 в 09:56

Хорошо, решение состоит в том, чтобы запуститься, демон передачи на переднем плане (не ожидают ветвление или демона), и это start-stop-daemon создает изодромный с предварением файл.
Полный сценарий:

description "Transmission daemon for user"

start on (local-filesystems and net-device-up IFACE=eth0 and runlevel [235])
stop on runlevel [016]

kill timeout 50

respawn

env USER=user
env PIDFILE=/var/run/transmission-user.pid

script
    DAEMON=$(which transmission-daemon) || exit 0
    CONFIGDIR=/home/$USER/.config/transmission-daemon

    exec start-stop-daemon --start --quiet --chuid $USER --pidfile $PIDFILE --make-pidfile --exec $DAEMON -- -f --config-dir $CONFIGDIR --logfile $CONFIGDIR/daemon.log
end script

post-stop exec rm -f $PIDFILE
2
ответ дан 1 December 2019 в 09:56

Моя версия:

start on (filesystem and net-device-up IFACE=lo)
stop on runlevel [!2345]

# give time to send info to trackers
kill timeout 30

expect fork
respawn

script
        USER=debian-transmission
        test -f /etc/default/transmission-daemon && . /etc/default/transmission-daemon
        test "$ENABLE_DAEMON" != "0" || exit 0
        exec start-stop-daemon --start --quiet --chuid $USER --exec /usr/bin/transmission-daemon -- $OPTIONS
end script

Хорошие воки:

root@ubuntu-server:/etc/init# status transmission-daemon
transmission-daemon start/running, process 754
root@ubuntu-server:/etc/init# ps aux|grep [t]ransmission-daemon
torrent    754  0.0  1.1  41592  5596 ?        Ssl  Oct21   0:56 /usr/bin/transmission-daemon --auth --config-dir /var/lib/transmission-daemon/info
-1
ответ дан 1 December 2019 в 09:56

Используя --foreground корректно — Вы хотите, чтобы выскочка отследила прогресс Вашего процесса передачи. Опустить --foreground добавить expect daemon к конфигурации init, которая будет следовать за двумя ветвлениями процесса, который является как сервисы daemonize.

Используя start-stop-daemon является субоптимальным, поскольку выскочка не может следить за Вашим процессом и повторно породить его по мере необходимости в случае катастрофического отказа и т.д.

Вот моя конфигурация:

start on (runlevel [2345] and filesystem and networking)
stop on runlevel [!2345]

respawn
kill timeout 30

setuid transmission

exec /usr/bin/transmission-daemon --foreground --config-dir /var/lib/transmission
2
ответ дан 1 December 2019 в 09:56

Другие вопросы по тегам:

Похожие вопросы: