Necesito el comando para eliminar los procesos que se han estado ejecutando desde al menos 5 minutos para un proceso determinado.
Tendré que ejecutar ese comando cada cinco minutos más o menos.
Un millón de gracias !
(el sistema es Centos5)
kill -9 $(ps -eo comm,pid,etimes | awk '/^procname/ {if ($3 > 300) { print $2}}')
donde "procname" es un nombre de proceso y 300 es el umbral de tiempo de ejecución
-9
ser un poco más amigable con mis procesos y agregué ungrep -v defunct |
antesawk
como otro lo que puede verprocname <defunct>
en su salida, lo que haría que el comando awk no devuelva un PID válido. Y esto rompería el comando de matar.$(ps -eo comm,pid,etimes | awk '/^procname/ {if ($3 > 300) { print "kill "$2}}')
es un poco más suave, pero la respuesta es excelente de todos modos¿Quizás ejecute el comando de ejecución larga como este en un crontab?
fuente
Mi versión del script kill, aprovechando las dos respuestas anteriores:
Filtra el proceso por UID, NOMBRE y, si el tiempo de ejecución excede el límite, mata los procesos y envía el informe por correo electrónico. Si no necesita ese correo electrónico, puede comentar la última línea.
fuente
Encontré la solución en esta página: http://www.directadmin.com/forum/showthread.php?t=26179
Cree un archivo vacío y llámelo killlongproc.sh
Copia esto:
Para esto en tu cronjob
fuente
kill -9
ya que no le da a los procesos la oportunidad de hacer una limpieza elegante antes de salir.Hay un script aquí que se puede modificar para hacer lo que quiera.
EDITAR agregó el script a continuación
fuente
etimes
deps
para mostrarle directamente los segundos transcurridos desde el inicio del proceso (no es necesario calcularlo desde la hora de inicio).ps
que no son compatiblesetimes
(soloetime
), esta es una gran alternativa. Solo lo usé cuando la respuesta principal me dio un errorps
Tuve que resolver una tarea similar y no necesita un script. Para terminar (señal SIGTERM) procesos del ejecutable "THECOMMAND":
La restricción para el usuario actual
-u $USER
es necesaria solo para evitar mensajes de error innecesarios si otros usuarios también ejecutan "THECOMMAND". En su propio crontab de usuario, ingresaría lo siguiente:En un crontab del sistema (usuario 'root'), agregaría lo siguiente:
Si desea matar (SIGKILL) los procesos en lugar de terminarlos (SIGTERM), envíe explícitamente la señal SIGKILL agregando
--signal SIGKILL
a los parámetros. Ejemplo para un crontab del sistema:fuente
Para httpd
ps eaxo pid, hora, comunicación | cola -n + 2 | grep 'httpd' | awk 'substr ($ 0,9,1)> 0' | awk '{print $ 1}'
fuente