Die PID der Befehle wird als anderer Benutzer ausgeführt

0

Als Root möchte ich einen Dienst als bestimmter Benutzer starten und dessen PID-Datei schreiben. Minimales nicht funktionierendes 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 nehme an, es liegt daran, dass eine neue Shell erzeugt wird und irgendwie ihre Geschichte nicht verfolgt. Kann ich das irgendwie zum Laufen bringen?

S. Murawski
quelle

Antworten:

0

Da Sie die su(1)von einem Skript aufgerufene Shell füttern , $!wird sie vom Skriptaufruf interpretiert su(1). Die Möglichkeit, dies zu verhindern, besteht darin, zu entkommen $!, und dann $!an die von der Shell aufgerufene Shell su(1)und nicht an das aufrufende Skript weitergeleitet zu werden:

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