PuTTY oder ANDERE - Ausführen des Befehls auch nach Beenden von PuTTY

13

Ich habe ein paar Befehle, die ich ausführen muss. Diese Befehle müssen kontinuierlich ausgeführt werden, auch nachdem ich meine Schnittstelle verlassen habe. Wenn ich Zugriff auf die Linux-GUI habe, führe ich Folgendes aus:

cd /home/testuser/Scripts*
xterm -hold -T "Background_Script1" -e  "service1-start.sh" &
sleep 10
xterm -hold -T "Background_Script2" -e "service2-start.sh" &

Jede Hilfe wird sehr geschätzt.

user3331952
quelle
Gibt es einen Grund, warum Sie diese Dienste nicht als Daemons betreiben?
SevenSidedDie
Sind die Befehle als Dienste gedacht, die mit einer Betriebszeit von nahezu 100% "für immer" ausgeführt werden sollen, oder eine langwierige Verarbeitungsaufgabe, die nach einiger Zeit abgeschlossen werden soll? Alle Antworten werden in beiden Fällen "funktionieren", die richtige Empfehlung wird jedoch unterschiedlich sein.
Peteris
Welche spezielle Linux-Distribution verwenden Sie? Ich habe das rennen gefunden set -m; macht es so, dass meine Skripte weiterlaufen, nachdem ich mich bei CentOS und RHEL abgemeldet habe.
ArtOfWarfare

Antworten:

33

Versuchen

nohup Background_ScriptX & amp;

nohup stellt sicher, dass ein Prozess nicht beendet wird, wenn ein Terminal geschlossen wird. Die & amp; Symbol drückt den Prozess in den Hintergrund.

Hoffe das war hilfreich.

Eamonn Travers
quelle
nohup macht definitiv den Job
Pitto
Freut mich zu helfen.
Eamonn Travers
15
Bildschirm hat einen klaren Vorteil gegenüber nohup : nohup erlaubt es nicht, zu einem laufenden Befehl zurückzukehren (z. B. am nächsten Morgen, um die Standardausgabe zu lesen und dann zu beenden, usw.) Bildschirm können Sie genau das tun.
Andreas F
1
nohup sendet die Ausgabe an eine Datei, wo sie verarbeitet werden kann.
Brian Knoblauch
Für diejenigen, die neu sind nohup, es ist im Grunde "no hangup" - mit nohup, dem hangup ( HUP ) Signal wird ignoriert.
Dan7119
20

Wenn Sie die Ausgabe zu einem späteren Zeitpunkt lesen möchten, können Sie verwenden screen:

screen -d -m my_command

Dadurch erhalten Sie ein separates Terminal, zu dem Sie später eine Verbindung herstellen können ( screen -r ), um die Ausgabe von stdout / stderr zu lesen.

Mark
quelle
2
+1. Zum einen, wenn Sie Ihr Terminal schließen (z. B. Putty) und dann erneut öffnen und den Bildschirm wieder anbringen ( screen -r ) Sie haben auch die gesamte Ausgabe Ihres Programms und Sie hätten sonst "versäumt". Außerdem kann der Bildschirm so viele erstaunliche Dinge tun, z. :)
Alberto Santini
6

Eine andere Option, wenn nohup Befehl ist nicht verfügbar, ist die Verwendung der verleugnen Befehl.

Zuerst können Sie Ihre Hintergrundaufgaben anzeigen, indem Sie sie ausführen jobs im Terminal. Dort erhalten Sie die Auftragsnummer.

Jetzt lauf einfach disown %[job number] Der Prozess wird vom aktuellen Terminal getrennt und bleibt beim Abmelden erhalten.

Randbemerkung: Stellen Sie sicher, dass Sie die richtige Frage stellen. Wenn Sie tatsächliche Dienste ausführen, während Sie in Ihrem Beispiel darauf hinweisen, möchten Sie möglicherweise prüfen, wie ein Dämon in einem Betriebssystem Ihrer Wahl erstellt wird. Dadurch wird sichergestellt, dass der Prozess nach einem Neustart noch ausgeführt wird und mit anderen Diensten konsistenter ist.

Hoffe das hilft.

user391035
quelle
3

Schon seit screen wurde bereits erwähnt: Es gibt andere Terminal-Multiplexer. ich mag tmux sehr viel, siehe z.B. diese andere Superuser-Frage, TMV vs Bildschirm zum Vergleich.

1k5
quelle
0

Sie können auch versuchen: setsid Setsid funktioniert auch für Hintergrundprogramme und ermöglicht es ihnen, weiter zu laufen, nachdem die Terminal / ssh-Sitzung getrennt wurde.

Verwenden Sie es so:

setsid program-to-background

Manpage: http://man7.org/linux/man-pages/man2/setsid.2.html

nulldev
quelle