Ich verwende die letzte Upstart-Version für Ubuntu 10.4 LTS. upstart wird mit --debug kernel flag gestartet.
Ich erstelle eine benutzerdefinierte Jobkonfiguration für den nzbget-Daemon. Grundsätzlich verfügt dieser Job über ein Pre-Start-Skript, mit dem ein Dateisystem gemountet wird, und ein Post-Start-Skript, mit dem das Dateisystem und eine exec nzbget -D
Zeile gemountet werden.
Das Problem ist, dass der nzbget-Daemon als nicht privilegierter Benutzer ausgeführt werden muss. Diese Funktion ist bereits in nzbget enthalten. Tatsächlich wird sudo nzbget -D
der Prozess von der Konsole aus als nicht privilegierter Benutzer ausgeführt. Aber wenn ich den Upstart-Job mit der exec nzbget -D
Zeile starte, läuft der Prozess nzbget -D als root. Wie im Upstart-Kochbuch erwähnt, habe ich versucht, su -c "nzbget -D" user und auch start-stop-daemon zu verwenden, ohne die empfohlene Zeilengruppe expect. Aber für beide Befehle, da upstart die falsche PID verfolgt, wird der Hauptprozess am Ende des Startprozesses (aufgrund von Upstart-Protokollen) als abgebrochen betrachtet und somit das Post-Process-Skript gestartet, das ich nicht möchte.
=> Wie kann ich das richtig machen? Wie kommt es, dass mit dem exec nzbget -D
Befehl sudo nzbget -D
upstart der Prozess als root ausgeführt wird, während er mit dem Befehl als nicht berechtigter Benutzer ausgeführt wird?
Ich schlage vor, sudo mit der folgenden Syntax zu verwenden:
Dadurch wird der Befehl foocommand als Benutzer foouser ausgeführt.
quelle