Skip to main content

Langlaufende (hängende) Prozesse beenden

Ich hatte schon öfter das Problem, dass sich manche Prozesse aufhängen (kein Wait, kein Timeout, aber auch keinerlei Ausgabe im strace) und sich nicht mehr regulär beenden. Das kam z.B. bei PHP-FPM-Children vor oder bei der Konvertierung von HTML-Dokumenten in PDF mittels pdflib. Eine genaue Ursache konnte ich leider nicht finden, daher habe ich einen dieser Cronjobs eingerichtet, der „alte“ Prozesse einfach killt.

Möglichkeit 1: Killen über „killall –older-than“ (Nachteil, funktioniert nicht bei Prozessen mit Leerzeichen oder als Match auf Programmparameter)

# pdflatex haengt gerne mal (Kille stündlich alle Prozesse älter als 30 Minuten)
0 * * * * killall --older-than 30m pdflatex

Möglichkeit 2: Prozess über find suchen, genau filtern und per xargs kill beenden

# das hier killt "www pool" Prozesse (z.B. bei PHP-FPM) die älter als eine Stunde sind.
# Bei PHP-FPM sollte pm.max_requests ungleich 0 sein, z.B. 50)
*/5 * * * * find /proc -maxdepth 1 -user deploy -type d -mmin +60 -exec basename {} \; | xargs ps | grep "pool www" | awk '{ print $1 }' | xargs kill