Я сделал сценарий для запуска демона передачи как обычного пользователя:
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
Когда Вы запускаете приложение с su -c
, su будет ожидать приложения для завершения. В Вашем случае, добавив --foreground
опция, сделайте передачу для не отсоединения от ее родителя. Таким образом, Вы будете видеть su
как родительский процесс transimssion-daemon
для все время последних жизней.
При удалении той опции Вы будете видеть это su
процесс завершится как только transmission-daemon
переходит к фону.
Кроме удаления той опции, которая кажется несвоевременной для сервиса, я предлагаю использовать
sudo -u <your-user> app-name options
вместо su
, быть больше близко к Ubuntu способ сделать вещи и быть более простым управлять опциями без потребности использовать одинарные кавычки.
Хорошо, решение состоит в том, чтобы запуститься, демон передачи на переднем плане (не ожидают ветвление или демона), и это 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
Моя версия:
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
Используя --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