Ich bearbeite ein init.d-Skript. Das Skript init.d führt ein Dienstprogramm-Skript aus, das dann einen Prozess ausführt. Wie würde ich aus beiden Bash-Skripten den Hauptprozess als bestimmten Benutzer und bestimmte Gruppe starten lassen?
process
init
privileges
Stéphane Gimenez
quelle
quelle
Usage: su [options] [LOGIN]
undsu: unrecognized option '--debug'
su www-data -c ${MONOSERVER} /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid &
wenn ichsu www-data
alle Variablen setze und sie ausführe${MONOSERVER} /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid &
. Wie löse ich das?su
ein einzelnes Argument, bei dem es sich um einen Shell-Befehl handelt. Sie müssen schreibensu www-data -c '$MONOSERVER "/application=$WEBAPPS" "/socket=unix:/path/monoserve.pid"'
und sicherstellen, dassMONOSERVER
undWEBAPPS
von der übergeordneten Shell exportiert werden. (Anmerkung: nicht tunsu … -c "$MONOSERVER …"
. Da dies fehlschlagen , wenn eine der Variablen Shell Sonderzeichen enthalten) Und wenn Sie einen dedizierten Daemon Launcher haben wiestart-stop-daemon
, verwenden Sie es.Wenn
start-stop-daemon
es auf Ihrem System verfügbar ist, sollten Sie es wahrscheinlich verwenden und sich die Optionen ansehen (insbesondere-u
und-g
in diesem Fall).(Andernfalls können Sie eine Kombination aus
su
und verwendensg
.)Update: Hier ist ein Beispiel aus einem
/etc/init.d/mpd
Skript (das verwendetstart-stop-daemon
):Startbefehl:
Alles, was folgt,
--
ist ein Argument für das/usr/bin/mpd
Programm selbst. (Die Dämonisierungsprozedur wird vom Start-Stopp-Dämon-Skript erledigt, dahermpd
wird gebeten, sich nicht darum zu kümmern--nodaemon
.)Befehl stoppen:
Wenn
mpd
nicht Privilegien von selbst fallen, würde man hinzufügen müssen (zum Beispiel)-u mpd
,-g mpd
Optionen für denstart-stop-daemon
Befehl.quelle
start-stop-daemon --start --quiet --background -u www-data -g www-data --exec ${MONOSERVER} --pidfile /path/monoserve.pid --make-pidfile -- /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid