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, disown
können Sie den Befehl verwenden nohup
.
$ nohup myexec &
Wenn Sie die Shell beenden, myexec
wird 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 HUP
an einen Prozessnamen, der dem Muster „sleep 12345“ entspricht. Eine doppelte Überprüfung zeigt, dass es jetzt weg ist.