Ich habe ein Skript erstellt, um den Transmission-Daemon als normaler Benutzer zu starten:
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
Dieses Skript funktioniert, aber ich sehe zwei Prozesse bei der Ausführung von Transmission-Daemon:
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
Ist das richtig? Gibt es eine andere Möglichkeit, dies besser auszuführen?
Hinweis: Das Standard-Startskript des Übertragungspakets ist deaktiviert .
Mehr Infos:
Wenn ich die Übertragung als Daemon durchführe (ohne foreground
), liegt das Problem in der erkannten PID von 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
aber das ist wirklich die PID von Sudo ( abgeschlossener Prozess ), der Übertragungs-Daemon PID ist eine andere:
$ 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
Ok, die Lösung ist, den Transmission-Daemon im Vordergrund zu starten (keine Gabelung oder Daemon erwarten) und start-stop-daemon
die PID-Datei zu erstellen.
Das komplette Drehbuch:
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
Die Verwendung von --foreground
ist korrekt - Sie möchten, dass der Emporkömmling den Fortschritt Ihres Übertragungsprozesses verfolgt. Um --foreground
wegzulassen, fügen Sie expect daemon
zur Init-Konfiguration hinzu. Dies folgt auf zwei Teilschritte des Prozesses. So werden Dienste dämonisiert.
Die Verwendung von start-stop-daemon
ist suboptimal, da Upstart Ihren Prozess nicht überwachen und ihn im Falle eines Absturzes nach Bedarf erneut starten kann.
Hier ist meine Konfiguration:
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
Wenn Sie eine App mit su -c
starten, wartet su darauf, dass die App beendet wird. Wenn Sie in Ihrem Fall die Option --foreground
hinzugefügt haben, lassen Sie die Übertragung so ablaufen, dass sie sich nicht von der übergeordneten Komponente löst. So werden Sie su
als einen übergeordneten Prozess von transimssion-daemon
für die gesamte Zeit sehen, in der dieser lebt.
Wenn Sie diese Option entfernen, wird der Prozess su
beendet, sobald transmission-daemon
in den Hintergrund tritt.
Abgesehen von der Entfernung dieser Option, die für einen Dienst unpassend erscheint, schlage ich vor, sie zu verwenden
Sudo -u <your-user> app-name options
statt su
, der Ubuntu-Arbeitsweise näher zu sein und Optionen einfacher zu verwalten, ohne einfache Anführungszeichen verwenden zu müssen.