Estoy buscando una forma de eliminar todos los procesos con un nombre de pila que se hayan estado ejecutando durante más de X veces. Engendro muchas instancias de este ejecutable en particular, y a veces entra en un mal estado y se ejecuta para siempre, ocupando mucha CPU.
Ya estoy usando monit, pero no sé cómo verificar un proceso sin un archivo pid. La regla sería algo como esto:
kill all processes named xxxx that have a running time greater than 2 minutes
¿Cómo expresarías esto en monit?
monitoring
monit
Desfile
fuente
fuente
Respuestas:
En monit, puede usar una cadena coincidente para procesos que no tienen un PID. Usando el ejemplo de un proceso llamado "myprocessname",
Tal vez si verifica si la carga de la CPU está en un cierto nivel durante 10 ciclos de monitoreo (de 30 segundos cada uno), luego reiniciar o matar, esa podría ser una opción. O puede usar la prueba de marca de tiempo de monit en un archivo relacionado con el proceso.
fuente
No hay una herramienta lista para usar con esa funcionalidad. Supongamos que quiere matar los scripts php-cgi, que duran más de un minuto. Hacer esto:
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
seleccionará los procesos por nombre,ps -o pid,time
imprime el tiempo de ejecución para cada pid y luego analiza la línea, extrae el tiempo e imprime pid si el tiempo se compara con el definido. resultado pasado a matar.fuente
Resolví este problema exacto con ps-watcher y escribí sobre ello en linux.com hace unos años. ps-watcher le permite monitorear procesos y eliminarlos en función del tiempo de ejecución acumulado. Aquí está la configuración relevante de ps-watcher, suponiendo que su proceso se llame 'foo':
La clave es la linea
que dice 'si el tiempo de proceso acumulado es> 1 hora Y no soy el proceso padre, reiníciame.
Entonces, me doy cuenta de que la respuesta no usa monit, pero funciona. ps-watcher es liviano y fácil de configurar, por lo que no es perjudicial ejecutarlo además de la configuración de su monitor.
fuente
Monit puede hacer esto a partir de la versión 5.4:
Ver: el archivo CAMBIOS del proyecto
fuente
Podría trabajar esto en monit como una declaración ejecutiva.
fuente