
Ich bin neu bei Linux und stelle wahrscheinlich eine ziemlich grundlegende Frage. Wie führe ich unter Linux ein kontinuierliches Programm aus?
Im Grunde habe ich ein Programm, das kontinuierlich nach Inhalten auf einer Website sucht. Dieses Programm wird mehrere Tage lang ausgeführt. Ich habe keine Administratorrechte auf dem Computer, auf dem ich dieses Programm ausführen möchte, und ich habe auch keinen exklusiven Zugriff auf diesen Computer, was bedeutet, dass sich andere Benutzer physisch anmelden können. Darüber hinaus wird der Computer, sofern nicht eine unvorhersehbare Katastrophe passiert, während der gesamten Dauer meines Programms ausgeführt.
Ich weiß, dass ich mich per SSH mit dem Computer verbinden und das Programm ausführen kann. Das ist jedoch nicht wünschenswert, da ich dafür einen zweiten Computer bräuchte (was dem Sinn meines Vorhabens irgendwie zuwiderläuft), ganz zu schweigen von Timeout-Problemen.
Gibt es eine Möglichkeit, mein Programm auf dem Computer remote auszuführen, ohne nach dem Start eine Verbindung irgendeiner Art herzustellen?
Antwort1
Verwenden Sie es, wenn dies in regelmäßigen Abständen geschehen muss cron
(z. B. müssen Sie die Website einmal pro Stunde oder einmal pro Tag oder öfter oder seltener überprüfen, dies darf jedoch nicht willkürlich definiert sein).
Allerdings... Sie möchten einen Befehl vielleicht zu einem späteren Zeitpunkt ausführen, anstattim Augenblick, dafür möchten Sie den Daemon verwenden at
, der es Ihnen ermöglicht, einen Befehl einmal zu einem späteren Zeitpunkt auszuführen (z. B. es ist 5 Uhr und Sie möchten nach Hause, haben aber einen 4-Stunden-Prozess, der am besten mitten in der Nacht ausgeführt wird und nicht wiederkehrend ist).
Ich würde sagen nohup
, screen
, tmux
wurden erwähnt. Verwenden Sie es, nohup
wenn Sie es jetzt sofort ausführen möchten, sich aber nicht erneut mit der Sitzung verbinden möchten, um später nachzuschauen. screen
/ tmux
sind zum späteren Nachschauen gedacht.
Antwort2
Sie müssen zwei Dinge tun:
- Führen Sie den Befehl mit aus
nohup
. Dadurch wird verhindert, dass der Remote-Computer den Befehl beendet, wenn Sie die Verbindung trennen. - Führen Sie den Befehl im Hintergrund aus, indem Sie anhängen
&
. Dies ist nicht unbedingt erforderlich, bringt Sie jedoch zu einer Shell zurück, anstatt den Befehl zu blockieren, sodass Sie die Verbindung normal trennen oder andere Dinge tun können.
Also für den Befehl command
:
nohup command &
Antwort3
nohup
ist definitiv der richtige Weg, wenn Sie Ihr Programm ausführen können, ohne mit ihm zu interagieren: wenn es beispielsweise alle seine Ausgaben und Fehlermeldungen in eine Datei schreibt, auf die Sie später zugreifen können. Überprüfen Sie die nohup.out
Datei, um alle Fehlermeldungen zu sehen, die das Programm während der Ausführung hinterlassen hat (danke für die Korrektur, Michael!)
Wenn Sie mit dem Programm interagieren müssen, während es ausgeführt wird,GNU-Bildschirmist vielleicht die bessere Lösung. Damit können Sie ein virtuelles Terminal erstellen, das auch nach dem Abmelden mit allen darin gestarteten Programmen weiterläuft, solange niemand den Computer herunterfährt.Hier ist ein TutorialIch habe es bei der Verwendung gefunden.