cron / crontab

Cron se ejecuta en el background, revisa cada minuto la tabla de tareas crontab /etc/crontab o en /var/spool/cron

comprobar si está en ejecución:

$ ps -ef | grep crond

Añadir el servicio si no lo estuviera:

$ chkconfig --level 35 crond on
 $ export EDITOR=nano

añadir el script a ejecutar en alguno de estos directorios (o un link):

  • /etc/cron.hourly → se ejecuta cada hora
  • /etc/cron.daily → se ejecuta cada día
  • /etc/cron.weekly → se ejecuta cada semana
  • /etc/cron.monthly → se ejecuta cada mes

modificar /etc/crontab las lineas que realmente ejecutan los «trabajos» son del estilo:

* * * * * <usuario> <comando> [ > /dev/null 2>&1 ]
  • indicar rangos: 1-3
  • indicar listas: 1,3,5,7
  • indicar fracciones:
    • */15 → cada 15 minutos (0,15,30,45)
    • 1-59/3 → cada 3 minutos, empezando por el minuto 1… 1,4,7,10… Diferente de */3 (0,3,6,9,12…)
    • 1-10/2 → los 1,3,5,7,9 (empieza en el 1, a saltos de 2)
    • 2/4 → 2,6,10,14 ???
    • indicando el rango de minutos, conseguimos desfasar de las ejecuciones de fracciones más simples
  • En algunas distribuciones, se pueden indicar interrogantes → asumirá el minuto/hora/dia en el que fue iniciado el cron y a partir de ese momento siempre será ese.
  • *L* : indica «último» (last)
    • en el caso del día de la semana, sería el último X del mes
    • en el caso del día del mes, sería el último día del mes
  • *W* : día de la semana (weekday)
    • usado en el día del mes, ejecuta la tarea el día laboral más cercano.
    • ejemplo: 15W, si el 15 es sábado, lo ejecuta el viernes 14, si es domingo lo ejecuta el lunes 16
  • *#* : usar en campo dia de la semana
    • permite ejecutar un determinado día de la semana de una semana concreta
    • ejempo: 5#3 ejecutaría el viernes de la tercera semana
  • *H* : hashed
    • repite en algún momento indeterminado, pero invariable a partir de entonces
 ------------- minutos (0 - 59)
 | ----------- horas (0 - 23)
 | | --------- dia del mes (1 - 31)
 | | | ------- mes (1 - 12)
 | | | | ----- dia de la semana (0 - 6) (domingo=0, lunes=1, ... sabado=6)
 | | | | |
 * * * * * comando a ejecutar


* significa todos los valores validos
/ permite definir una repeticion
- permite definir un rango
, permite definir varios valores

otros formatos (special strings):

  • @reboot → Run once, at startup.
  • @yearly → Run once a year, «0 0 1 1 *».
  • @annually → (same as @yearly)
  • @monthly → Run once a month, «0 0 1 * *».
  • @weekly → Run once a week, «0 0 * * 0».
  • @daily → Run once a day, «0 0 * * *».
  • @midnight → (same as @daily)
  • @hourly → Run once an hour, «0 * * * *».

con los siguientes comandos podemos gestionar nuestros propios trabajos CRON (individual para cada usuario):

$ crontab <fichero> : añade el fichero con formato cron
$ crontab -e : edita el fichero
$ crontab -l : lista los trabajos añadidos a nuestros fichero
$ crontab -r : elimina los crontab
  • El formato del crontab es ligeramente diferente, no se ha de especificar el usuario.
  • permite una linea del tipo:
    • MAILTO=«direccion@correoelectronico.es»
    • CRON_TZ=Europe/Andorra
    • El fichero se guarda en /var/spool/cron/crontabs (en una debian, al menos)
  • ejecuta el trabajo a las 00:00, 06:00, 12:00, 18:00
0 0,6,12,18 * * * /comando
  • ejecuta el trabajo a las 00:00, 06:00, 12:00, 18:00 pero solo los días laborables:
0 0,6,12,18 * * 1-5 /comando
  • ejecuta el trabajo a las 00:00, 06:00, de 9:00 a 15:00 cada hora, 18:00 pero solo los días laborables:
0 0,6,9-15,18 * * 1-5 /comando
  • ejecuta el trabajo cada 6 horas (basicamente, cuando la división da 0 de resto) a la hora en punto (el 0 de los minutos):
0 */6 * * * /comando
  • ejecuta el trabajo cada 5 minutos:
*/5 * * * * /comando
  • ejecuta el trabajo todos los días pares a las 12:00:
0 12 */2 * * /comando

se puede controlar quien usa y quien no el servicio CRON en los archivos:

/etc/cron.allow
/etc/cron.deny

en estos ficheros se añade la lista de usuarios con o sin permisos. Se puede utilizar ALL en cualquiera de los 2

Si no se crea el cron.deny y si el cron.allow, es como si hubiesemos creado un cron.deny con un ALL y tendremos que añadir a todos los usuarios que tengan que utilizar este servicio en el cron.allow

  • linux/cron/cron.txt
  • Darrera modificació: 30/05/2026 04:44
  • per mate