Ich möchte bei jedem Start meines Servers ein Skript ausführen. Das Problem ist, dass ich ein bestimmter Benutzer sein muss, um das Skript auszuführen. Wenn ich versuche, es als root auszuführen, kann es bestimmte Pakete (wie z. B. Ruby) nicht finden.
Ich versuche zu xxx user01 zu wechseln.
sudo su user01
/etc/init.d/script start
Dies funktioniert jedoch nicht.
ubuntu
startup-scripts
rc.local
Philip
quelle
quelle
su
das rc-Skript?Antworten:
Das Ausführen
sudo su user01
in einem Skript bedeutet nicht, dass die folgenden Befehle an die resultierende Shell gesendet werden. Tatsächlich bedeutet dies wahrscheinlich, dass eine neue Shell als user01 erzeugt wird, die niemals beendet wird!Zwei Dinge:
-c 'command...'
Argument wie folgt an su übergebensu user01 -c '/etc/init.d/script start'
.chkconfig
oder aktivierenupdate-rc.d
. Sie möchten auch keine Jobs in /etc/init.d, die nicht als gestartet werden sollenroot
. Die Jobs selbst können jederzeit einem anderen Benutzerkonto zugeordnet werden, sollten jedoch von root aufgerufen werden.quelle
Sie könnten etwas hineinlegen
/etc/crontab
und es ausführen@reboot
quelle
Sie können den Befehl einfach wie folgt über sudo ausführen:
-H setzt die Umgebungsvariable HOME auf die des Benutzers
-u gibt den Benutzernamen an, unter dem ausgeführt werden soll
quelle
Sicherlich können Sie dieses Skript nicht mit sudo ausführen, da vorausgesetzt wird, dass Benutzer angemeldet sind. Möglicherweise möchten Sie deaktivieren, was etwas riskant ist
Es gibt auch ein etwas älteres Tool namens RUNSUID: http://freecode.com/projects/runsuid
HTH
quelle