W systemie Linux mam kilka procesów, które czasami ulegają awarii (serwery gier), które kończą przy użyciu 100% procesora.
Szukam programu lub skryptu, aby sprawdzić użycie procesora przez listę procesów według nazwy i jeśli są one w 100% dłużej niż X czas, powiedzmy 30 sekund, zabij je. Próbowałem ps-watchera, ale nie byłem w stanie określić, jak to osiągnąć.
Samo zabicie procesu przy 100% użyciu nie zadziała, ponieważ uderzy to w krótkie okresy podczas normalnej pracy.
Znalazłem również ten skrypt, który wydaje się robić to, co chcę, ale jest ograniczony do jednego procesu: linku
Każda pomoc jest mile widziana!
Odpowiedzi:
Spróbuj Monit .
Możesz użyć takiej konfiguracji, aby wykonać swoje zadanie:
Szczegóły dotyczące tej konfiguracji można znaleźć w dokumentacji monitora .
źródło
start program
istop program
są tylko w przypadku, gdymonit
trzeba ponownie uruchomić proces. Nadal możesz uruchomić go za pomocą zwykłego skryptu inicjującego.monit
może również sprawdzić, czy program jest już uruchomiony (np. przez swój plik PID lub nazwę procesu).Właśnie tego szukałem i używałem go od jakiegoś czasu (nieco zmieniony). Ostatnio umieściłem błąd w mojej pracy, ale muszę utrzymać działanie aplikacji (serwera gry).
Zacytowałem część, w której zabija się najwyższy PID, ponieważ zabija niewłaściwy PID.
Oto mój najnowszy szkic twojego skryptu, do tej pory znajduje on najwyższe przeciążenie i skutecznie go zabija (także e-mailem z informacją, gdy cokolwiek robi);
Ten mały skrypt jest niezwykle przydatny, jeśli nie podoba Ci się zabicie jakiegokolwiek procesu, sam e-mail pomoże Ci na bieżąco otrzymywać informacje.
źródło
TOPPROCESS
jest wyłączone. Nie sortuje według wartości rzeczywistej, zamiast tego porządkuje wpisy alfanumerycznie (np. 6% będzie miało pierwszeństwo przed 12%). Lepszą alternatywą może być następujące polecenie:top -b -n 1 | sed 1,6d | sed -n 2p
Poniżej znajduje się przykładowy skrypt BASH, który może pomóc ci uzyskać wskazówki dotyczące własnych potrzeb.
Pamiętaj, że wartość twojego $ CPU_THRESHOLD powinna zależeć od liczby rdzeni (CPU), które masz w systemie. Szczegółowe wyjaśnienie tego tematu można znaleźć na stronie http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages .
Możesz wywołać swój skrypt z poziomu pliku / etc / inittab lub cronjob na każdą liczbę minut, którą wolisz. Należy również pamiętać, że przykładowy skrypt zabije najwyższy proces, jeśli $ CPU_LOAD jest większy niż $ CPU_THRESHOLD.
źródło