¿Qué es cron?
En los sistemas operativos Unix y Linux, cron es un administrador de procesos que se encuentra en segundo plano en forma de demonio o «daemon» y que ejecuta procesos o scripts según se programe a intervalos regulares (puede ser cada minuto, un día concreto, semana, mes etc…). Se usa principalmente para tareas administrativas y para el usuario root se encuentra en /etc/crontrab, aunque también podemos usar el comando crontab como si de un usuario normal se tratase.
Cada usuario puede tener también su propio cron mediante la instrucción «crontab». Si queremos listar el contenido del cron del usuario con el que estamos logados:
$ crontab -l:
listado del crontab
$ crontab -e:
edición del crontab
En el caso de no tener ningún cron nos aparecerá: no crontab for root – using an empty one
Select an editor. To change later, run 'select-editor'.
/bin/nano <---- easiest
/usr/bin/vim.tiny
/bin/ed
Choose 1-3 [1]
Estado/Reiniciar cron
Cron es un «daemon» que se inicia al arrancar el equipo, por lo que no es necesario iniciarlo, pero sí que podemos ver su estado, y reiniciarlo en el caso de que hagamos cambios, para no tener que reiniciar la máquina.
Ver el estado:$ /etc/init.d/cron status
$service cron statu
s ● cron.service - Regular background program processing daemon Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2022-04-06 08:44:56 CEST; 4h 57min ago Docs: man:cron(8) Main PID: 776 (cron) Tasks: 1 (limit: 4915) CGroup: /system.slice/cron.service └─776 /usr/sbin/cron -f
Reiniciar el servicio cron$ /etc/rc.d/init.d/cron restart
$service cron restart
[ ok ] Restarting cron (via systemctl): cron.service.
Usar cron
Tenemos dos formas de usar «cron». Una de ellas se encuentra en el directorio /etc/ donde tenemos los directorios por hora, día, semana o mes respectivamente. Colocando el script en alguno de estos directorios se ejecutará según se especifica.
cron.hourly
cron.daily
cron.weekly
cron.monthly
(No olvidemos darle permisos de ejecución a nuestro script: chmod +x file.sh)
La otra forma de ejecutar cron es modificando el fichero /etc/crontab que tiene este aspecto:
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
SHELL: es el «shell» bajo el que se ejecuta el cron.
PATH: indica la ruta de directorios donde el cron buscará el comando a ejecutar.
MAIL TO: correo a quién se enviará la salida.
HOME: el directorio raíz del cron que se indica en el usuario /etc/passwd
- minute: controla el minuto de la hora en que el comando será ejecutado, este valor debe de estar entre 0 y 59.
- hour: controla la hora en que el comando será ejecutado, se especifica en un formato de 24 horas, los valores deben estar entre 0 y 23, 0 es 00:00 am.
- day of month: día del mes en que se quiere ejecutar el comando. Por ejemplo se indicaría 5, para ejecutar el comando el día 5 del mes.
- month: mes en que el comando se ejecutará, puede ser indicado numéricamente del 1 al 12, o con el nombre del mes en inglés, sólo las tres primeras letras.
- day of week: día en la semana en que se ejecutará el comando, puede ser numérico (0-7) o con el nombre del día en inglés, sólo las tres primeras letras. (0 y 7 = domingo)
- user-name: usuario que ejecuta el comando.
- command to be executed: comando o script a ejecutar. Este campo puede contener varios comandos deparados por punto y coma.
Ejemplos básicos
Ejemplo | Descripción |
---|---|
01 * * * * | Se ejecuta al minuto 1 de cada hora de todos los días |
15 8 * * * | A las 8:15 a.m. de cada día |
15 20 * * * | A las 8:15 p.m. de cada día |
00 5 * * 0 | A las 5 a.m. todos los domingos |
* 5 * * Sun | Cada minuto de 5:00a.m. a 5:59a.m. todos los domingos |
45 19 1 * * | A las 7:45 p.m. del primero de cada mes |
01 * 20 7 * | Al minuto 1 de cada hora del 20 de julio |
10 1 * 12 1 | A la 1:10 a.m. todos los lunes de diciembre |
00 12 16 * Wen | Al mediodía de los días 16 de cada mes y que sea Miércoles |
30 9 20 7 4 | A las 9:30 a.m. del dia 20 de julio y que sea jueves |
30 9 20 7 * | A las 9:30 a.m. del dia 20 de julio sin importar el día de la semana |
20 * * * 6 | Al minuto 20 de cada hora de los sábados |
20 * * 1 6 | Al minuto 20 de cada hora de los sábados de enero |
Ejemplos con listas o incrementos
Ejemplo | Descripción |
---|---|
59 11 * 1-3 1,2,3,4,5 | A las 11:59 a.m. de lunes a viernes, de enero a marzo |
45 * 10-25 * 6-7 | Al minuto 45 de todas las horas de los días 10 al 25 de todos los meses y que el día sea sábado o domingo |
10,30,50 * * * 1,3,5 | En el minuto 10, 30 y 50 de todas las horas de los días lunes, miércoles y viernes |
*/15 10-14 * * * | Cada quince minutos de las 10:00a.m. a las 2:00p.m. |
* 12 1-10/2 2,8 * | Todos los minutos de las 12 del día, en los días 1,3,5,7 y 9 de febrero y agosto. (El incremento en el tercer campo es de 2 y comienza a partir del 1) |
0 */5 1-10,15,20-23 * 3 | Cada 5 horas de los días 1 al 10, el día 15 y del día 20 al 23 de cada mes y que el día sea miércoles |
3/3 2/4 2 2 2 | Cada 3 minutos empezando por el minuto 3 (3,6,9, etc.) de las horas 2,6,10, etc (cada 4 horas empezando en la hora 2) del día 2 de febrero y que sea martes |
/1 * * * * | Cada minuto utilizando. La barra «/» significa crear una lista de todos los minutos y ejecutar el trabajo cada minuto |
0,5,10,15,20,25,30,35,40,45,50,55 * * * * | Cada 5 minutos separando con «,» para crear una lista de minutos |