Wie kann ich einen Befehl als anderer Benutzer ausführen, während Fedora hochfährt?

1941
Navaneeth K N

Ich habe einen Server, auf dem Fedora 19 ausgeführt wird. Wenn der Server hochfährt, muss ich eine Reihe von Befehlen ausführen. Ich mache das in einer /etc/rc.d/rc.localDatei. Das funktioniert gut. Jetzt muss ich meinen nodejsServer mit diesem Skript starten .

Ich möchte das Serverprogramm nicht als starten root. Also habe ich so etwas wie das Folgende in der rc.localDatei ausprobiert .

su myuser -c /home/myuser/project/path/prod_start.sh 

Dies führt prod_start.shals aus myuser. Aber in prod_start.sh, ich ändere das Verzeichnis in das Stammverzeichnis der Anwendung. Es erwartet auch, dass einige Umgebungsvariablen vor der Ausführung gesetzt werden. Da diese Umgebungsvariablen jedoch bash_profilefür Benutzer definiert sind myuser, wurde keine von ihnen wirksam und das Skript ist fehlgeschlagen.

Ich frage mich, wie ich einen Befehl als anderer Benutzer mit allen für ihn festgelegten Umgebungsvariablen ausführen kann. Soll ich alle diese Umgebungsvariablen auf Systemebene so einstellen, dass sie allen Benutzern zur Verfügung stehen?

0
Warum fangen Sie nicht einfach an, wenn Sie sich einloggen? Führen Sie Ihr Skript in Ihren `~ / bash_login`- oder` ~ / .Xsession'-Dateien aus. terdon vor 10 Jahren 0
Es ist ein Headless-Server. `XSession` wird also nicht da sein. `bash_login` ist auch keine Option, da sie bei der Protokollierung über ssh ausgelöst wird. Navaneeth K N vor 10 Jahren 0
Nun, du kannst nicht alles haben. Sie können Ihre Variablen im Skript selbst festlegen. Sie könnten das Skript von `~ / .bash_profile` starten lassen. Möglicherweise können Sie es mit `su myuser bash -c" script.sh "` zum Laufen bringen, da dies wahrscheinlich das `~ / .bash_profile 'lesen würde. terdon vor 10 Jahren 0

1 Antwort auf die Frage

1
JoshOfAllTrades

Wenn Sie den Schalter '-' hinzufügen, wird das Profil von myuser geladen. Mit anderen Worten, Sie können Profilumgebungsvariablen laden, während sie kopflos sind.

su - myuser -c "cmd_to_execute"