Ich benötige den Befehl, um Prozesse abzubrechen, die seit mindestens 5 Minuten für einen bestimmten Prozess ausgeführt wurden.
Ich muss diesen Befehl etwa alle fünf Minuten ausführen.
Tausend Dank !
(System ist Centos5)
kill -9 $(ps -eo comm,pid,etimes | awk '/^procname/ {if ($3 > 300) { print $2}}')
Dabei ist "Prozessname" ein Prozessname und 300 der Schwellenwert für die Laufzeit
-9
ein wenig freundlicher mit meinen Prozessen umzugehen , und eingrep -v defunct |
Vorher hinzugefügt,awk
wie Sie vielleichtprocname <defunct>
in Ihrer Ausgabe sehen, was dazu führen würde, dass der Befehl awk keine gültige PID zurückgibt . Und das würde den Kill-Befehl brechen.$(ps -eo comm,pid,etimes | awk '/^procname/ {if ($3 > 300) { print "kill "$2}}')
ist ein bisschen flüssiger, aber die Antwort ist trotzdem großartigFühren Sie den Langzeitbefehl wie folgt in einer Crontab aus?
quelle
Meine Version des Kill-Skripts nutzt die beiden vorherigen Antworten:
Es filtert den Prozess nach UID, NAME und wenn die Ausführungszeit das Limit überschreitet, werden Prozesse abgebrochen und Berichte an E-Mails gesendet. Wenn Sie diese E-Mail nicht benötigen, können Sie einfach die letzte Zeile kommentieren.
quelle
Ich habe die Lösung auf dieser Seite gefunden: http://www.directadmin.com/forum/showthread.php?t=26179
Machen Sie eine leere Datei und nennen Sie sie killlongproc.sh
Kopier das:
Hör auf damit in deinem Cronjob
quelle
kill -9
da es Prozessen nicht die Möglichkeit gibt, vor dem Beenden eine ordnungsgemäße Bereinigung durchzuführen.Hier gibt es ein Skript , das Sie ändern können, um das zu tun, was Sie wollen.
EDIT hat das folgende Skript hinzugefügt
quelle
etimes
von verwendenps
, um die seit dem Prozessstart verstrichenen Sekunden direkt anzuzeigen (es ist nicht erforderlich, sie von der Startzeit an zu berechnen).ps
nicht unterstützten Versionen ist dies jedoch eine großartige Alternative. Ich habe es gerade benutzt, als mir die beste Antwort einen Fehler vonetimes
etime
ps
Ich musste eine ähnliche Aufgabe lösen und es wird kein Skript benötigt. Zum Beenden (Signalisieren von SIGTERM) von Prozessen der ausführbaren Datei "THECOMMAND":
Die Beschränkung auf den aktuellen Benutzer
-u $USER
ist nur erforderlich, um unnötige Fehlermeldungen zu vermeiden, wenn andere Benutzer ebenfalls "THECOMMAND" ausführen. In Ihrem eigenen Benutzer crontab würden Sie Folgendes eingeben:In einer System-Crontab (Benutzer 'root') würden Sie Folgendes hinzufügen:
Wenn Sie die Prozesse beenden (SIGKILL) möchten, anstatt sie zu beenden (SIGTERM), senden Sie das SIGKILL-Signal explizit durch Hinzufügen
--signal SIGKILL
zu den Parametern. Beispiel für eine System-Crontab:quelle
Für httpd
ps eaxo pid, time, comm | tail -n + 2 | grep 'httpd' | awk 'substr ($ 0,9,1)> 0' | awk '{print $ 1}'
quelle