Potrzebuję polecenia, aby zabić procesy, które działały od co najmniej 5 minut dla danego procesu.
Będę musiał uruchamiać to polecenie co około pięć minut.
Stukrotne dzięki !
(system to Centos5)
kill -9 $(ps -eo comm,pid,etimes | awk '/^procname/ {if ($3 > 300) { print $2}}')
gdzie „procname” to nazwa procesu, a 300 to próg czasu działania
-9
żeby nie być trochę bardziej przyjaznym dla moich procesów, i dodałemgrep -v defunct |
wcześniej,awk
jak inaczej widaćprocname <defunct>
na wyjściu, co sprawiłoby, że polecenie awk nie zwróciłoby prawidłowego PID. A to złamałoby polecenie zabicia.$(ps -eo comm,pid,etimes | awk '/^procname/ {if ($3 > 300) { print "kill "$2}}')
jest nieco gładszy, ale odpowiedź i tak jest świetnaMoże uruchom tak długo uruchomioną komendę w crontab?
źródło
Moja wersja skryptu zabijania, wykorzystująca obie poprzednie odpowiedzi:
Filtruje proces według UID, NAZWA, a jeśli czas wykonania przekroczy limit - zabija procesy i wysyła raport na e-mail. Jeśli nie potrzebujesz tego e-maila - możesz po prostu skomentować ostatni wiersz.
źródło
Znalazłem rozwiązanie na tej stronie: http://www.directadmin.com/forum/showthread.php?t=26179
Utwórz pusty plik i nazwij go killlongproc.sh
Skopiuj to:
Zatrzymaj to w swojej koleżance
źródło
kill -9
ponieważ nie daje procesom szansy na płynne czyszczenie przed wyjściem.Jest tutaj skrypt , który możesz zmodyfikować, aby zrobić to, co chcesz.
EDIT dodał poniższy skrypt
źródło
etimes
lub,ps
aby wyświetlić bezpośrednio upływające sekundy od rozpoczęcia procesu (nie musisz obliczać go od czasu rozpoczęcia).ps
, które nie obsługująetimes
(tylkoetime
), jest to świetna alternatywa. Właśnie go użyłem, gdy pierwsza odpowiedź dała mi błądps
Musiałem rozwiązać podobne zadanie i nie potrzebuje on skryptu. Do kończenia procesów (sygnał SIGTERM) wykonywalnego „THECOMMAND”:
Ograniczenie do bieżącego użytkownika
-u $USER
jest konieczne tylko w celu uniknięcia niepotrzebnych komunikatów o błędach, jeśli inni użytkownicy również uruchamiają „THECOMMAND”. We własnym crontabie użytkownika wpisujesz następujące dane:W systemowym pliku crontab (użytkownik „root”) należy dodać:
Jeśli chcesz zabić (SIGKILL) procesy zamiast ich zakończenia (SIGTERM), jawnie wyślij sygnał SIGKILL, dodając
--signal SIGKILL
do parametrów. Przykład crontab systemu:źródło
Dla httpd
ps eaxo pid, czas, komunikator | ogon -n + 2 | grep „httpd” | awk 'substr (0,9,1 $)> 0' | awk „{drukuj 1 $}”
źródło