Ich habe einige Bots, die vom System-Scheduler in bestimmten Zeitintervallen ausgeführt werden. Aber manchmal muss ich diese Bots aufgrund eines logischen Fehlers manuell stoppen. Wie kann ich diese vom Scheduler ausgeführten Prozesse finden und beenden?
Akzeptierte Antwort:
Sie können Prozesse nach Namen beenden. Unter Linux, *BSD und Solaris beispielsweise pkill myprogram
beendet alle Prozesse, deren Name myprogram
enthält (verwenden Sie pkill '^myprogram$'
für eine genaue Übereinstimmung). Wenn Sie es als Nicht-Root-Benutzer ausführen, werden nur die Prozesse dieses Benutzers beendet, und es gibt weitere Optionen zur Steuerung des Abgleichs (Einzelheiten finden Sie im Handbuch Ihres Systems).
Wenn Sie gezielt auf vom Scheduler gestartete Prozesse abzielen möchten und die Prozesse manuell beenden, können Sie ps f
ausführen (nur Linux) oder pstree
(nur Linux) oder ptree
um die Prozesse in einem Baum anzuzeigen und zu sehen, welche Prozesse von cron gestartet wurden.
Wenn Sie diese Prozesse automatisch mit einer hausgemachten Methode beenden möchten, lassen Sie sie ihre Prozess-ID in einer Datei speichern. Diese Art von Datei wird als PID-Datei bezeichnet, wenn sie verwendet wird, um nur eine einzige Instanz des Prozesses auszuführen (was möglicherweise gewünscht ist oder nicht). Wenn Sie mehrere Instanzen wünschen, speichern Sie die PIDs in separaten Dateien in einem gemeinsamen Verzeichnis; Hier ist ein Shell-Snippet, das dies tut:
pid_dir=/var/run/myprogram # must have been created e.g. at boot time
myprogram &
pid_file=$pid_dir/$!.pid
touch "$pid_file"
wait
rm "$pid_file"
Eine bessere Lösung, wenn Sie strenge Kriterien haben, um außer Kontrolle geratene Prozesse zu erkennen, besteht darin, ein allgemeines Überwachungsprogramm zu verwenden oder in einfachen Fällen nur die Dauer der Ausführung des Prozesses zu begrenzen. Möglicherweise finden Sie diese Links hilfreich:
- „Monit kann einen Prozess starten, wenn er nicht läuft, einen Prozess neu starten, wenn er nicht antwortet, und einen Prozess stoppen, wenn er zu viele Ressourcen verbraucht.“
- Ich brauche Hilfe bei einem Cronjob, um nach außer Kontrolle geratenen Prozessen zu suchen und sie zu beenden
- Wie schränke ich die Ressourcennutzung ein, um CPU+RAM für einen bestimmten Prozess zu sparen?
- Gibt es eine Möglichkeit, die Speichermenge zu begrenzen, die ein bestimmter Prozess in Unix verwenden kann?