¿Cómo configuro un trabajo de Cron?

534

Quiero programar una tarea para que se ejecute regularmente y he oído que Cron es la forma de hacerlo.

¿Cómo agrego trabajos Cron en Ubuntu?

Gabriel Solomon
fuente

Respuestas:

655

Poner un script de shell en una de estas carpetas: /etc/cron.daily, /etc/cron.hourly, /etc/cron.monthlyo /etc/cron.weekly.

Si esto no es suficiente 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 en ese archivo lo explica todo! En cada línea puedes definir un comando para ejecutar y su programación, y el formato es bastante simple cuando lo dominas. La estructura es:

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

Para todos los números, puede usar listas, por ejemplo, 5,34,55en el campo de minutos significará correr a las 5 pasadas, 34 pasadas y 55 pasadas cualquier hora definida.

También puedes usar intervalos. Se definen así: */20. Este ejemplo significa cada 20, así 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 aquí .

LassePoulsen
fuente
77
Estos son de todo el sistema y se ejecutan con altos privilegios. No pondría nada allí a menos que haya una necesidad apremiante de acceso o permiso. Como regla general, intente hacer cosas sin capacidades. Por lo tanto, me gusta más esta respuesta: ubuntu.stackexchange.com/questions/2368/how-do-i-setup-cron-job/…
H Marcelo Morales
55
@Marcelo Morales, ¡que también ejecutará los comandos dados como root! si, por otro lado, no usa sudo, creará un crontab de usuario y se ejecutará como el usuario que lo creó.
LassePoulsen
44
* / 15 * * * * / path / to / command fue muy útil para mí. ¡Gracias!
Andrew Odendaal
18
Vale la pena señalar que estos cambios se aplican automáticamente, no necesita reiniciar / volver a cargar nada.
Molomby
66
Otro consejo útil es que, en lugar de hacerlo */15 * * * * /path/to/command, puede hacerlo @reboot /path/to/commandpara ejecutar algo en el inicio.
Kenneth Worden
102

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, agrega una línea como esta

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

y guarda 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 crontab del sistema, /etc/crontabque solo puede editar con privilegios de root. En este archivo, el usuario debe ejecutar cada comando 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 en el 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 crontab del sistema con cat /etc/crontab.

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

Li Lo
fuente
1
Aquí hay un dulce manipulador de cron interactivo que le dará el inglés al cron time crontab.guru
CTS_AE
52

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

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

Javier Rivera
fuente
3
no disponible para 16.04 aparentemente bugs.launchpad.net/ubuntu/+source/gnome-schedule/+bug/1576060
TankorSmash
@TankorSmash Puedes obtenerlo aquí
M. Becerra
Los requisitos del paquete no se pueden cumplir el 16.04
Odysseus Ithaca
26

Recomiendo el Programador de tareas de KDE ( kde-config-cron) Instalar kde-config-cron . Acceda desde la Configuración del sistema en el módulo Programador de tareas allí.

Gestiona tanto las Crontabs personales como las del sistema, y ​​la facilidad de crear límites de tiempo me sorprendió mucho (ver la captura de pantalla a continuación). Creo que esta parte está realmente subestimada.

ingrese la descripción de la imagen aquí

gertvdijk
fuente
11

El programador de tareas de KDE no funcionará en Ubuntu normal. Solo funciona en sistemas KDE como KUbuntu. Para un sistema que no sea KDE, preferirá utilizar gnome-schedule

$ sudo apt-get install gnome-schedule

La aplicación es Tareas programadas en el Tablero.

Antonio
fuente
No se encuentra para Ubuntu 16.04
SaidbakR
Por favor, eche un vistazo a I can't install gnome schedule on Ubuntu 16.04@ askubuntu.com/questions/785657/… . Hay un paquete para descargar @ bugs.launchpad.net/ubuntu/+source/gnome-schedule/+bug/1576060/… . Solo realiza$ sudo dpkg -i gnome-schedule_2.3.0-0ubuntu16.04_amd64.deb
Antonio
10

Quería configurar un trabajo de Cron para ejecutar 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 de Cron:

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

También debemos establecer la propiedad correcta del archivo:

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

Y establezca los permisos correctos:

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

Si cuando ejecuta crontab -eya hay trabajos de Cron en la lista, puede agregarlos a la lista con el siguiente comando:

echo "30 17 * * 1 /path/to/command" >> /var/spool/cron/crontabs/root
Craig van Tonder
fuente
2

Ejemplo de ejecutar script test_cron.shpor cron cada minuto en Ubuntu 18.04 usando un enlace simbólico:

test_cron.sh archivo:

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

Si desea utilizar variables de entorno en su script, como $USERen 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 raíz sean necesarios).

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

sudo nano /etc/cron.allow

root
myname

El camino hacia el script es /home/myname/shell/test_cron.sh

Cambié el propietario y lo hice ejecutable:

sudo chown myname /home/myname/shell/test_cron.sh
chmod +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 cuando mynameagregué una nueva tarea para ejecutar test_croncada minuto.

crontab -e

*/1 * * * * test_cron

Para verificar si el comando en la lista:

crontab -l

*/1 * * * * test_cron

Para verificar la ejecución

grep -i cron /var/log/syslog

Nov 17 12:28:01 myname-ubuntu CRON[13947]: (myname) CMD (system-backup)
Alejandro
fuente