PID der Befehle wird als anderer Benutzer ausgeführt

452
S. Murawski

Als Root möchte ich einen Dienst als bestimmten Benutzer starten und seine PID-Datei schreiben. Minimales arbeitsfreies Beispiel:

if [ $UID -eq 0 ]; then  su myuser <<EOF  sleep 30 &  echo $! >mypid.pid  EOF fi  

Nach der Ausführung ist die Datei mypid.pid leer, $! ist auch leer, aber es gibt einen Prozessschlaf für meinen Benutzer mit zugewiesener pid (offensichtlich). Ich drücke darauf, dass eine neue Shell erzeugt wird und ihre Geschichte irgendwie nicht verfolgt wird. Gibt es eine Möglichkeit, damit es funktioniert?

0

1 Antwort auf die Frage

0
Sami Laine

Da Sie die su(1)von einem Skript aufgerufene Shell füttern, $!wird sie vom aufrufenden Skript interpretiert su(1). Dies kann man verhindern, indem man flucht und $!dann $!in die Shell kommt, die von su(1)und nicht vom aufrufenden Skript aufgerufen wird :

if [ $UID -eq 0 ]; then  su myuser <<EOF  sleep 30 &  echo \$! >mypid.pid  EOF fi