Ich suche nach einer Möglichkeit, alle Prozesse mit einem bestimmten Namen zu beenden, die länger als die Hälfte der Zeit ausgeführt wurden. Ich spawne viele Instanzen dieser bestimmten ausführbaren Datei, und manchmal geht sie in einen schlechten Zustand über und läuft für immer, wobei sie viel CPU aufnimmt.
Ich verwende bereits Monit, kann aber nicht nach einem Prozess ohne PID-Datei suchen. Die Regel wäre etwa so:
kill all processes named xxxx that have a running time greater than 2 minutes
Wie würden Sie dies in Monit ausdrücken?
monitoring
monit
Parand
quelle
quelle
Antworten:
In monit können Sie für Prozesse ohne PID eine übereinstimmende Zeichenfolge verwenden. Am Beispiel eines Prozesses mit dem Namen "meinProzessname"
Wenn Sie überprüfen, ob die CPU-Auslastung für 10 Überwachungszyklen (jeweils 30 Sekunden) auf einem bestimmten Niveau liegt, starten Sie den Computer möglicherweise neu oder beenden Sie ihn. Dies kann eine Option sein. Oder Sie können den Zeitstempeltest von monit für eine Datei verwenden, die sich auf den Prozess bezieht.
quelle
Es gibt kein einsatzbereites Tool mit dieser Funktionalität. Nehmen wir an, Sie möchten PHP-CGI-Skripte beenden, die länger als eine Minute dauern. Mach das:
pgrep php-cgi | xargs ps -o pid,time | perl -ne 'print "$1 " if /^\s*([0-9]+) ([0-9]+:[0-9]+:[0-9]+)/ && $2 gt "00:01:00"' | xargs kill
pgrep
wählt Prozesse nach Namen aus, gibt dieps -o pid,time
Laufzeit für jede PID aus und analysiert dann die Zeile, extrahiert die Zeit daraus und gibt die PID aus, wenn die Zeit mit der definierten Zeit verglichen wird. Ergebnis übergeben, um zu töten.quelle
Ich habe genau dieses Problem mit ps-watcher gelöst und vor ein paar Jahren auf linux.com darüber geschrieben . Mit ps-watcher können Sie Prozesse überwachen und sie basierend auf der akkumulierten Laufzeit beenden. Hier ist die relevante Konfiguration von ps-watcher, vorausgesetzt, Ihr Prozess heißt 'foo':
Der Schlüssel ist die Linie
Hier steht 'Wenn die akkumulierte Prozesszeit> 1 Stunde ist UND ich nicht der übergeordnete Prozess bin, starte mich neu.
Mir ist also klar, dass die Antwort kein Monit verwendet, aber funktioniert. ps-watcher ist leicht und einfach einzurichten, so dass es keinen Schaden anrichtet, es zusätzlich zu Ihrem Monit-Setup zu betreiben.
quelle
Monit kann dies ab Version 5.4:
Siehe: das Projekt CHANGES-Datei
quelle
Sie können dies als exec-Anweisung in monit einarbeiten.
quelle