By

Crontab

Hoy trabajando en Yaco Sistemas he aprendido algo nuevo sobre cron. Seguramente muchos de los que os moveis entre GNU/Linux y similares, conoceréis el demonio cron.

Cron es un planificador de tareas que nos permite ejecutar una tarea en un momento determinado en el tiempo. La sintaxis para configurar una tarea cron es la siguiente:

.---------------- minuto (0 - 59)
|  .------------- hora (0 - 23)
|  |  .---------- día del mes (1 - 31)
|  |  |  .------- mes (1 - 12)
|  |  |  |  .---- día de la semana (0 - 6) (Domingo=0)
|  |  |  |  |
*  *  *  *  *  comando para ser ejecutado

De esta forma, imaginad que queremos apagar nuestro ordenador los sábados a las 21:30h, configuraríamos una tarea cron de la siguiente forma:

30 21 * * 6 /sbin/shutdown -h now

Podemos planificar tareas para un usuario utilizando el comando crontab:

  • crontab -l Lista las tareas cron para el usuario actual.
  • crontab -e Permite configurar una tarea cron para el usuario actual. Se abrirá el editor de texto configurado por defecto en el sistema.
  • crontab -r Elimina las tareas cron configuradas en el usuario actual.
  • crontab -v Muestra la última vez que se editó crontab del usuario actual.

La verdad es que no parece una sintaxis muy complicada pero a mi, personalmente, siempre se me olvida.

Como os decía al principio, hoy he descubierto los horarios predefinidos en crontab gracias a ant30. Estos horarios predefinidos son unos valores que se pueden usar para sustituir la sintaxis de las expresiones anteriores. Estos valores predefinidos son:

  • @yearly Se ejecuta una vez al año. Equivalente a 0 0 1 1 *
  • @annually (igual que @yearly). Equivalente a 0 0 1 1 *
  • @monthly Se ejecuta una vez al mes. Equivalente a 0 0 1 * *
  • @weekly Se ejecuta una vez a la semana. Equivalente a 0 0 * * 0
  • @daily Se ejecuta una vez al día. Equivalente a 0 0 * * *
  • @midnight (igual que @daily). Equivalente a 0 0 * * *
  • @hourly Se ejecuta una vez cada hora. Equivalente a 0 * * * *
  • @reboot Se ejecuta en el arranque y al reiniciar.

El que yo he utilizado hoy ha sido @reboot que me permite ejecutar un comando cuando arranca el sistema. En mi caso quería que cada vez que se arranque el sistema, se iniciara un servicio desplegado con el usuario en cuestión. Gracias a @reboot no tengo que crear un script en /etc/init.d/ y activarlo en el arranque ;-)

Un saludo!