Szukam sposobu na zabicie wszystkich procesów o podanej nazwie, które działały przez ponad X czasu. Odradzam wiele wystąpień tego konkretnego pliku wykonywalnego, a czasem przechodzi on w zły stan i działa wiecznie, zajmując dużo procesora.
Już używam monit, ale nie wiem, jak sprawdzić proces bez pliku pid. Reguła byłaby mniej więcej taka:
kill all processes named xxxx that have a running time greater than 2 minutes
Jak wyraziłbyś to w monit?
monitoring
monit
Parand
źródło
źródło
Odpowiedzi:
W monit możesz użyć pasującego łańcucha dla procesów, które nie mają PID. Korzystając z przykładu procesu o nazwie „mojaprocesa”,
Być może, jeśli sprawdzisz, czy obciążenie procesora jest na określonym poziomie przez 10 cykli monitorowania (po 30 sekund), a następnie uruchom ponownie lub zabij, może to być opcja. Lub możesz użyć testu sygnatury czasowej monitora dla pliku związanego z procesem.
źródło
Nie ma gotowego do użycia narzędzia z taką funkcjonalnością. Załóżmy, że chcesz zabić skrypty php-cgi, które działają dłużej niż minutę. Zrób to:
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
wybierze procesy według nazwy,ps -o pid,time
drukuje środowisko wykonawcze dla każdego pid, a następnie analizuje linię, wyodrębnia z niej czas i drukuje pid, jeśli czas porównuje się z określonym. wynik przekazany do zabicia.źródło
Dokładnie rozwiązałem ten problem z ps- watcherem i pisałem o tym na linux.com kilka lat temu. ps-watcher pozwala monitorować procesy i zabijać je na podstawie skumulowanego czasu działania. Oto odpowiednia konfiguracja ps-watcher, zakładając, że twój proces nazywa się „foo”:
Kluczem jest linia
co mówi: „jeśli skumulowany czas procesu wynosi> 1 godzina ORAZ nie jestem procesem nadrzędnym, uruchom mnie ponownie.
Zdaję sobie sprawę, że odpowiedź nie korzysta z monitora, ale działa. ps-watcher jest lekki i prosty w konfiguracji, więc korzystanie z niego oprócz konfiguracji monitorowania nie jest szkodliwe.
źródło
Monit może to zrobić od wersji 5.4:
Zobacz: plik ZMIANY projektu
źródło
Możesz to przetworzyć w monit jako instrukcję exec.
źródło