¿Cómo puedo ver / detener las tareas actuales de crontab?

20
  1. ¿Cómo puedo ver las tareas de crontab que están en progreso?
  2. ¿Cómo puedo detener las tareas crontab que están en progreso, manualmente?

¿Es [esta] pregunta sobre ver los procesos cron en ejecución actuales?

Para matar un proceso manualmente, una forma es usar pkill

Había pensado en pkill / killall, ¡pero algunos de mis comandos en el archivo crontab están respectivamente! ¡significa que después de terminar un comando, se iniciará el siguiente! por ejemplo:

sudo crontab -e
00 10 * * * /usr/bin/wget LINK ; shutdown -h now

Entonces, si mato wget, ¡la computadora se apagará! -> ¡Quiero matar una tarea cron por completo, no una parte de ella!

El siguiente pkillproblema: ¿Qué pasa con los scripts? (He importado algunos scripts de bash a crontab -e) ->sudo pkill ???

mini
fuente
¿Es su pregunta sobre ver los procesos cron actuales en ejecución? o la lista de cron-jobs? Edite su pregunta para ser más claro al respecto. Para detener la ejecución de cron-job vaya ( askubuntu.com/q/272419/66980 )
Mohammad Etemaddar
Editado; 1. sí, ¿está viendo los procesos cron actuales? (Quiero poner los procesos en primer plano); 2. Entonces, ¿quiero detenerlo manualmente? (no del horario de crontab)
mini
La mejor manera de agregar información adicional a su pregunta es editándola, con el botón Editar . Es mejor visible de esa manera, y los comentarios son principalmente para fines secundarios y temporales. Los comentarios se eliminan en una variedad de circunstancias. Cualquier cosa importante para su pregunta debe estar en la pregunta misma.
Guntbert

Respuestas:

42

En primer lugar, use solo un comando por línea en crontab. Cambia esta línea crontab:

00 10 * * * /usr/bin/wget LINK ; shutdown -h now

entonces se ve así:

00 10 * * * /path/to/my/crontab/script1.sh

y crea /path/to/my/crontab/script1.shcon este contenido:

#!/bin/bash
/usr/bin/wget LINK
shutdown -h now

Por supuesto, no olvide darle permiso de ejecución:

chmod +x /path/to/my/crontab/script1.sh

En segundo lugar, puede ver la ejecución de tareas crontab, en un formato útil y legible, en la salida de:

ps -o pid,sess,cmd afx | egrep -A20 "( |/)cron( -f)?$"

Aparecerán en las primeras líneas, algo como esto:

1108  1108 cron
4288  1108 \_ CRON
4289  4289     \_ /bin/sh -c /path/to/my/crontab/script1.sh
4290  4289         \_ /bin/bash /path/to/my/crontab/script1.sh
4295  4289             \_ /usr/bin/wget LINK

La primera columna es PID, la segunda es la ID de sesión y la tercera es el comando iniciado por cron. Puede matar todos los procesos relacionados con una tarea cron específica utilizando la ID de sesión, por lo que en el ejemplo anterior debe matar la ID de sesión 4289:

pkill -s 4289
Eric Carvalho
fuente
1
Obtengo esto cuando sh ps: cmd: keyword not found ps: illegal argument: afx
ejecuto el
¿Entonces cron no da una manera "práctica" para mostrar sus procesos?
Cirelli94
@alecrust: Prueba estops -o pid,sess,cmd -afx | egrep "( |/)cron( -f)?$"
Bulrush el
0

Para matar un proceso manualmente, una forma es usarlo pkill. pkill detendrá todos los procesos que tengan el siguiente patrón en su nombre. por ejemplo, para detener todos los procesos de wget, use:

sudo pkill wget
Mohammad Etemaddar
fuente
Había pensado en pkill / killall, ¡pero algunos de mis comandos en el archivo crontab están respectivamente! ¡significa que después de terminar un comando, se iniciará el siguiente! por ejemplo: sudo crontab -e=> 00 10 * * * /usr/bin/wget LINK ; shutdown -h now=> Entonces, si mato wget , ¡la computadora se apagará! -> ¡Quiero matar una tarea cron por completo, no una parte de ella! El siguiente problema pkill: ¿Qué pasa con los scripts? (He importado algunos scripts de bash a crontab -e) ->sudo pkill ???
mini
0

cambia tu cronjob así

00 10 * * * /usr/bin/wget LINK && shutdown -h now

Esto debería funcionar, porque &&significa que el segundo comando solo se ejecuta cuando el primero se terminó correctamente (devolviendo el estado 0 a la consola / sistema), lo que no debería ser el caso (porque el proceso fue eliminado por el usuario y debería devolver otro valor entonces 0).

s1mmel
fuente