Gibt es einen Mechanismus, um einen „Dienst“ durch einen Nicht-Root-Benutzer auszuführen?

Gibt es einen Mechanismus, um einen „Dienst“ durch einen Nicht-Root-Benutzer auszuführen?

Gibt es eine Möglichkeit, einen kontinuierlich laufenden Hintergrundprozess zu haben, den ich (ein normaler Benutzer ohne Rootberechtigung) steuern kann?

Ich muss den Prozess lediglich starten, stoppen und neu starten können. Die Überwachung per PID und das Senden von SIGHUP oder SIGINT zum Beenden ist in Ordnung. Ich bin mit der Verwendung eines komplizierten Bash-Skripts einverstanden, es muss nicht systemweit sein. Nur für mich.

Ich brauche es auch unbedingt, damit es nicht stoppt, wenn ich mich von SSH abmelde.

Gibt es eine Möglichkeit, dies in RHEL 6.4 zu tun?

Antwort1

Bildschirm oder tmux

Natürlich können Sie Prozesse starten und dann kontinuierlich laufen lassen, indem Sie einen Terminal-Multiplexer wie screen oder tmux verwenden. Prozesse können in einer screen- oder tmux-Sitzung weiterlaufen und Sie können bei Bedarf eine Verbindung zu einem der beiden (screen oder tmux) herstellen/trennen.

Hintergrund

Sie können jeden beliebigen Prozess ausführen und ihn dann in den Hintergrund versetzen und ihn anschließend mit dem Befehl von Ihrem aktuellen Terminal trennen disown.

$ disown -a

Wenn Sie außerdem einfach einen Prozess starten möchten und ihn nicht im Hintergrund ausführen möchten, disownkönnen Sie den Befehl verwenden nohup.

$ nohup myexec &

Wenn Sie die Shell beenden, myexecwird sie weiterhin ausgeführt.

Beispiel

Starten Sie einen Fake-Prozess.

$ sleep 12345 &
[1] 24339
$

Stellen Sie sicher, dass wir es sehen können:

$ pgrep -f "sleep 12345"
24339

Aber es ist immer noch mit unserem Terminal verbunden:

$ jobs
[1]+  Running                 sleep 12345 &

Also los geht’s disown:

$ disown -a
$ jobs
$

Sehen Sie, es läuft noch:

$ pgrep -f "sleep 12345"
24339

Melden wir uns jetzt ab und wieder an. Sehen Sie, es ist immer noch da:

$ pgrep -f "sleep 12345"
24339

Sie können diesen Vorgang jederzeit mit den üblichen Mitteln beenden:

$ pkill -HUP -f "sleep 12345"
$ pgrep -f "sleep 12345"
$ 

Das Obige sendet das Signal HUPan einen Prozessnamen, der dem Muster „sleep 12345“ entspricht. Eine doppelte Überprüfung zeigt, dass es jetzt weg ist.

verwandte Informationen