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?

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  
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.