Cron

De doc.ubuntu-es
(Diferencias entre revisiones)
Saltar a: navegación, buscar
(New page: '''Cron''' es un programa o demonio (daemon) que permite ejecutar otros programas o scripts en un lapso de tiempo y una periodicidad especificada por el usuario. Su comportamiento esta...)
 
m (Correcciones, alertas y aclaraciones)
Línea 15: Línea 15:
 
La sintaxis del archivo crontab es muy clara y rígida. Hay seis campos por cada linea, y cada campo está separado por un espacio. Los primeros cinco campos específican el momento preciso de ejecución, mientras que el sexto campo es el propio comando o script que se ejecutará. Los primeros cinco campos son:
 
La sintaxis del archivo crontab es muy clara y rígida. Hay seis campos por cada linea, y cada campo está separado por un espacio. Los primeros cinco campos específican el momento preciso de ejecución, mientras que el sexto campo es el propio comando o script que se ejecutará. Los primeros cinco campos son:
  
  <nowiki> *     *     *    *    *      /commando/a/ejecutar
+
  <nowiki> #     m     h    dom  mon  dow    /commando/a/ejecutar
  -    -    -    -    -
+
  -    -    -    -    -    -
  |    |    |    |    |
+
  |    |    |    |    |    |
  |    |    |    |    +----- día de la semana (0 - 6) (dom = 0)
+
  |    |    |    |    |    +----- día de la semana (0 - 6) (dom = 0)
  |    |    |    +------- mes (1 - 12)
+
  |    |    |    |    +------- mes (1 - 12)
  |    |    +--------- día del mes (1 - 31)
+
  |    |    |    +--------- día del mes (1 - 31)
  |    +----------- hora (0 - 23)
+
  |    |    +----------- hora (0 - 23)
  +------------- minuto (0 - 59)</nowiki>
+
  |    +------------- minuto (0 - 59)
 +
+---------------- espacio vacío (no poner nada)</nowiki>
  
  
Línea 45: Línea 46:
  
 
empleando la '''opción -l''', veremos las tareas estipuladas en crontab. En este caso sólo veríamos la tarea que acabamos de agregar, pero si nuestro crontab ya tenía tareas programadas también aparecerían.  
 
empleando la '''opción -l''', veremos las tareas estipuladas en crontab. En este caso sólo veríamos la tarea que acabamos de agregar, pero si nuestro crontab ya tenía tareas programadas también aparecerían.  
 +
 +
 +
 +
{{Importante|Es un fallo común el empezar a poner algún dato debajo de "#", por lo que el archivo acaba estando mal codificado y nos aparece el error:
 +
 +
crontab: installing new crontab
 +
"/tmp/crontab.bm5Oqc/crontab":1: bad command
 +
errors in crontab file, can't install.
 +
Do you want to retry the same edit?
 +
 +
En caso de que esto nos ocurra, podemos pulsar la "y" de "yes" para corregir la estructura de nuestro crontab. Seguramente hayamos puesto un dato temporal de más (un asterisco muy probablemente). Debemos asegurarnos que en cada línea tenemos 5 cifras para determinar la periodicidad y luego el comando (<nowiki>* * * * *</nowiki> comando).}}
 +
  
 
La '''opción -r''' elimina el archivo crontab del usuario, o lo que es lo mismo, ''todas la tareas programadas en nuestro crontab'', así que no se usa muy a menudo, y cuando se usa ha de emplearse con mucha precaución.
 
La '''opción -r''' elimina el archivo crontab del usuario, o lo que es lo mismo, ''todas la tareas programadas en nuestro crontab'', así que no se usa muy a menudo, y cuando se usa ha de emplearse con mucha precaución.

Revisión de 20:22 2 may 2008

Cron es un programa o demonio (daemon) que permite ejecutar otros programas o scripts en un lapso de tiempo y una periodicidad especificada por el usuario. Su comportamiento esta regulado por su archivo de configuración, que se llama crontab. Cada usuario del sistema posee un archivo crontab personalizado y sólo el usuario root puede modificar el archivo crontab de otro usuario. Si se desea agregar un archivo crontab, es necesario entrar ("logearse") primero como ese usuario.


Cómo editar el archivo crontab

Un usuario sólo puede hacer uso de crontab si su nombre aparece en:

/etc/cron.allow

Si este archivo no existe, el usuario puede usar crontab a menos que su nombre aparezca en:

/etc/cron.deny.

La sintaxis del archivo crontab es muy clara y rígida. Hay seis campos por cada linea, y cada campo está separado por un espacio. Los primeros cinco campos específican el momento preciso de ejecución, mientras que el sexto campo es el propio comando o script que se ejecutará. Los primeros cinco campos son:

 #     m     h    dom   mon   dow    /commando/a/ejecutar
 -     -     -     -     -     -
 |     |     |     |     |     |
 |     |     |     |     |     +----- día de la semana (0 - 6) (dom = 0)
 |     |     |     |     +------- mes (1 - 12)
 |     |     |     +--------- día del mes (1 - 31)
 |     |     +----------- hora (0 - 23)
 |     +------------- minuto (0 - 59)
 +---------------- espacio vacío (no poner nada)


Para editar el archivo crontab sólo es necesario abrir una consola de comandos y ejecutar el comando:

crontab -e


Si es la primera vez que lo ejecutamos, veremos un archivo vacío en el editor nano (editor de textos en consola de Gnome en Ubuntu). En este caso, si agregamos la siguiente línea al archivo:

45 19 * * * rm /home/NombreDeUsuario/tmp/*

estaremos indicando a cron que el contenido del directorio /home/NombreDeUsuario/tmp/ será borrado todos los días a las 7:45 PM. Si queremos conservar esta instrucción, tendremos que guardar el archivo pulsando la tecla F3, y salir de nano pulsando la tecla F2. Veremos el mensaje:

crontab:installing new crontab 


que indica que una nueva tarea ha sido agregada a cron. Si ejecutamos el comando:

crontab -l


empleando la opción -l, veremos las tareas estipuladas en crontab. En este caso sólo veríamos la tarea que acabamos de agregar, pero si nuestro crontab ya tenía tareas programadas también aparecerían.


Important.png Es un fallo común el empezar a poner algún dato debajo de "#", por lo que el archivo acaba estando mal codificado y nos aparece el error:
crontab: installing new crontab
"/tmp/crontab.bm5Oqc/crontab":1: bad command
errors in crontab file, can't install.
Do you want to retry the same edit? 

En caso de que esto nos ocurra, podemos pulsar la "y" de "yes" para corregir la estructura de nuestro crontab. Seguramente hayamos puesto un dato temporal de más (un asterisco muy probablemente). Debemos asegurarnos que en cada línea tenemos 5 cifras para determinar la periodicidad y luego el comando (* * * * * comando).


La opción -r elimina el archivo crontab del usuario, o lo que es lo mismo, todas la tareas programadas en nuestro crontab, así que no se usa muy a menudo, y cuando se usa ha de emplearse con mucha precaución.


Clip.png Si queremos usar otro editor de consola que no sea nano (como por ejemplo, vim, es necesario exportar la variable de ambiente EDITOR. Para ello, podemos escribir en consola de comandos y escribir:
export EDITOR="vim"

Si deseamos cambiar de editor de manera permamente, tendremos que agregar esta misma línea al archivo:

$HOME/.bashrc.


Habitualmente, cron envía un e-mail de notificación al usuario propietario de crontab. Esto puede llegar a ser molesto, sobre todo si tenemos un cron que se ejecuta con mucha frecuencia. Para deshabilitar el envio de este e-mail agregaremos lo siguiente al final de cada línea del crontab:

>/dev/null 2>&1


Algunos ejemplos

Algunos ejemplos de líneas que podemos añadir a crontab son:

  • Para el comando ping al equipo 192.168.0.1 cada minuto, de cada hora, de cada día, de cada mes. Es decir, hacer un ping a cada minuto (nótese la terminación en >/dev/null 2>&1 para no recibir la notificación).
* * * * * /sbin/ping -c 1 192.168.0.1 >> /dev/null


  • Para ejecutar lo mismo, pero que el ping sólo se ejecute los días laborables de la semana (de Lunes a Viernes) a las 8:00 PM en punto y sólo durante el mes de octubre.
0 20 * 10 1-5 /sbin/ping -c 1 192.168.0.1 >> /dev/null


  • Para ejecutar un script de respaldo en python de lunes a domingo a medianoche (0:00 AM) los días 1, 15 y 28 de cada mes (para asegurarnos que en febrero también se haga)
0 0 1,15,28 * * /home/mmonrdz/scripts/respaldar.py


  • Para ejecutar un script que actualiza la base de datos de cotizaciones todos los lunes a las 7:00 AM, 7:50 AM, 8:00 AM y 8:50 AM sin enviar el e-mail de notificación.
0,50 7,8 * * 1 /home/mmonrdz/scripts/dbcotiza.pl >/dev/null 2>&1


Fuentes

Herramientas personales