¿Cómo configuro un trabajo Cron?

Quiero programar una tarea para que se ejecute de forma regular y he escuchado que Cron es la forma de hacerlo.

¿Cómo agrego trabajos Cron en Ubuntu?

Coloque un script de shell en una de estas carpetas: /etc/cron.daily, /etc/cron.hourly, /etc/cron.monthly o /etc/cron.weekly.

Si estas no son suficientes para usted, puede agregar tareas más específicas, por ejemplo, dos veces al mes o cada 5 minutos. Vaya a la terminal y escriba:

crontab -e

Esto abrirá su crontab personal (archivo de configuración cron). La primera línea de ese archivo lo explica todo. En cada línea, puede definir un comando para ejecutar y su programación, y el formato es bastante simple cuando lo aprende. La estructura es:

minute hour day-of-month month day-of-week command

Para todos los números puede usar listas, p. ej. 5,34,55 en el campo minutos significará ejecutar a las 5 pasadas, 34 pasadas y 55 pasadas, cualquiera que sea la hora definida.

También puedes usar intervalos. Se definen así: */20. Este ejemplo significa cada 20, por lo que en la columna de minutos es equivalente a 0,20,40.

Entonces, para ejecutar un comando todos los lunes a las 5: 30 de la tarde:

30 17 * * 1 /path/to/command

o cada 15 minutos

*/15 * * * * /path/to/command

Tenga en cuenta que el día de la semana va de 0 a 6, donde 0 es domingo.

Puedes leer más aqui.

Si el trabajo que desea ejecutar se puede ejecutar con los mismos privilegios que su usuario, le recomiendo usar un crontab de usuario que puede editar ejecutando EDITOR="gedit" crontab -e (que usará gedit para editar el archivo crontab) o simplemente crontab -e (que usará el editor predeterminado) en una terminal.

Si desea ejecutar algo cada 10 minutos, por ejemplo, agregue una línea como esta

*/10 * * * * /usr/bin/somedirectory/somecommand

y guarde el archivo.

Puede ver el contenido del crontab de usuario con crontab -l.

Para agregar un trabajo cron que se ejecute como root, puede editar el crontab de root ejecutando sudo crontab -e.

La forma más flexible es utilizar el sistema crontab /etc/crontab que solo puede editar con privilegios de root. En este archivo, el usuario de cada comando debe ejecutarse como se especifica, por lo que puede ejecutar sus comandos como root (en caso de que necesite ese nivel de privilegio) o cualquier otro usuario del sistema.

Por ejemplo, si desea ejecutar algo cada 10 minutos como root, agregaría una línea como esta

*/10 * * * * root /usr/bin/somedirectory/somecommand

(observe la adición del usuario a la línea)

Puede ver el contenido del archivo system crontab con cat /etc/crontab.

Más detalles en: https://help.ubuntu.com/community/CronHowto

Si prefiere hacerlo mediante una GUI, puede ir al Centro de software e instalar Tareas programadas (o corre sudo apt-get install gnome-schedule). Proporcionará una potente interfaz gráfica de usuario para agregar tareas cron.

Tenga en cuenta que si utiliza este método, las tareas se ejecutarán de forma predeterminada como su propio usuario, no como root. Esto suele ser algo bueno.

Recomiendo Programador de tareas de KDE (kde-config-cron) . Acceda a él desde el Configuración del Sistema en el Programador de Tareas módulo allí.

Administra Crontabs personales y del sistema, y la facilidad de crear los límites de tiempo me sorprendió enormemente (vea la captura de pantalla a continuación). Creo que esta parte está realmente subestimada.

El programador de tareas de KDE no funcionará en Ubuntu normal. Funciona solo en sistemas KDE como KUbuntu. Para sistemas que no sean KDE, preferirá usar gnome-schedule

$ sudo apt-get install gnome-schedule

La aplicación es tareas programadas en el Tablero.

Quería configurar un trabajo Cron para que se ejecutara a través de un script bash, por lo que ejecutar el script agregaría un trabajo cron.

Me di cuenta de que cuando haces uso de:

crontab -e 

Luego crea el archivo:

/var/spool/cron/crontabs/root

Donde root es el nombre del usuario que ejecuta el comando crontab. Entonces, en base a esto y al menos en 14.04, podemos ejecutar los siguientes comandos bash para crear un nuevo trabajo Cron:

echo "30 17 * * 1 /path/to/command" > /var/spool/cron/crontabs/root

También necesitamos establecer la propiedad correcta para el archivo:

chown root:root /var/spool/cron/crontabs/root

Y establece los permisos correctos:

chmod 600 /var/spool/cron/crontabs/root

Si cuando corres crontab -e ya hay trabajos Cron en la lista, luego puede agregar a la lista usando el siguiente comando:

echo "30 17 * * 1 /path/to/command" >> /var/spool/cron/crontabs/root

Ejemplo de script en ejecución test_cron.sh por cron cada minuto en Ubuntu 18.04 usando un enlace simbólico:

test_cron.sh file:

#!/bin/bashecho "System backuped" >> /media/myname/data/backup/backup_tmp.log

Si desea utilizar variables de entorno en su script como $USER en las rutas, es mejor escribir una ruta precisa, bash no conocerá sus variables en el momento de la ejecución.

myname es el nombre de usuario (parte del grupo raíz, no estoy seguro de que los privilegios de root sean necesarios).

Permita que los usuarios establezcan trabajos cron, se creará un archivo si es necesario:

sudo nano /etc/cron.allowrootmyname

La ruta al script es /home/myname/shell/test_cron.sh

Cambié el propietario y lo hice ejecutable:

sudo chown myname /home/myname/shell/test_cron.shchmod +x /home/myname/shell/test_cron.sh

Agregué un enlace simbólico:

sudo ln -s /home/myname/shell/test_cron.sh /usr/bin/test_cron

Registrado como myname Agregué una nueva tarea para ejecutar test_cron cada minuto.

crontab -e*/1 * * * * test_cron

Para comprobar si el comando de la lista:

crontab -l*/1 * * * * test_cron

Para comprobar la ejecución

grep -i cron /var/log/syslogNov 17 12:28:01 myname-ubuntu CRON[13947]: (myname) CMD (system-backup)

Considerando que tienes múltiples trabajos cron con un usuario en particular y no comparten el mismo horario. Puede simplemente crear un archivo en /etc/cron.d/Digamos que el nombre del archivo es myjobs luego, simplemente escriba todos sus programadores en ese archivo y luego ejecute el siguiente comando.

crontab -u <username> /etc/cron.d/myjobs