El Cron Daemon es un servicio con el que puede ejecutar scripts y programas programados con tiempo. Los comandos que se van a ejecutar se guardan en una tabla que se llama Crontab. En este artículo le explicaremos cómo acceder a esta tabla a través de SSH y cómo ejecutar scripts y programas programados con tiempo.

Para utilizar Cron deberá establecer una conexión SSH a su proyecto. A continuación introduzca el comando crontab -e para abrir el archivo Crontab.El archivo Crontab se encuentra en el directorio /var/spool/cron.

Editar el archivo Crontab con vi

Al acceder a crontab -e se accede de forma estándar al Editor vi (para editar el archivo con el Editor Nano, también puede introducir el comando EDITOR=nano crontab -e).

El Editor vi dispone de un modo de inserción y un modo de comando. Puede acceder al modo inserción mediante la tecla i. En este modo, los símbolos introducidos se añaden de inmediato al texto. Para acceder al modo de comando es necesario pulsar a continuación la tecla ESC. Al utilizar el modo de comando, las entradas del teclado se interpretarán como comandos. Tenga en cuenta que vi no puede finalizarse en modo de inserción. Para finalizarlo, es necesario acceder siempre al modo de comando.

A continuación se muestran los comandos más importantes:

Comando Descripción
dd Eliminar línea actual
u Deshacer el último cambio
J Agrupar líneas
o Insertar nueva línea debajo de la actual
P Insertar los datos copiados en la posición en la que se encuentra el cursor
:q! Cerrar el editor sin guardar los cambios.
:wq Guardar el texto y cerrar el editor

Estructura del archivo Crontab y de la sintaxis Crontab

Todos los comandos que va a ejecutar Cron se guardan en una tabla. Esta tabla se llama Crontab y se compone de las siguientes columnas:

Minutos (0 - 59) Horas (0 - 23, 0 = medianoche) Día (1 - 31) Mes (1 - 12) Días de la semana (0 - 6, 0 = domingo) Comando o ruta de directorio y nombre del script
* * * * * p. ej. /var/www/directory/myscript.sh

Las primeras cinco columnas de esta tabla contienen información temporal. Las entradas de estas columnas no pueden contener espacios en blanco. La sexta columna contiene el comando correspondiente o la ruta de directorio y el nombre del script deseado. Las diferentes columnas se separan por medio de espacios en blanco.

Al introducir un comando, asegúrese de que indica siempre la ruta completa. Asimismo, también deberá insertar un salto de línea para pasar a otro párrafo después de introducir el comando (p. ej. con '\n').

En el siguiente ejemplo, se realizará una copia de seguridad del directorio /var/www/html/sites a las 04:01 horas del 1 de enero y cada lunes del mes de enero.

01 04 1 1 1 cp -a /var/www/html/sites /var/www/html/backups

En este caso, la copia de seguridad se guardará en el directorio /var/www/html/backups.

Para realizar una copia de seguridad del directorio /var/www/html/sites diariamente a las 04:01, introduzca el siguiente comando:

01 04 * * * cp -a /var/www/html/sites /var/www/html/backups

Si desea realizar una copia de seguridad del directorio cada 10 minutos, introduzca el siguiente comando:

*/10 * * * cp -a /var/www/html/sites /var/www/html/backups

Para ejecutar el comando a las 8, a las 9 y a las 10, introduzca el comando con el siguiente formato:

* 8-10 * * cp -a /var/www/html/sites /var/www/html/backups

Importante: Opcionalmente podrá introducir esta información temporal con el siguiente formato: 8,9,10

Para realizar una copia de seguridad del directorio /var/www/html/sites diariamente en el periodo entre enero y junio a las 04:01, 04:31, 05:01 y 05:31, del día 1 al 15 del mes, introduzca el siguiente comando:

01,31 04,05 1-15 1,6 * cp -a /var/www/html/sites /var/www/html/backups

Cadenas de texto predefinidas para determinar la información temporal

También puede utilizar cadenas de texto predefinidas para establecer la información temporal de una tarea cron. Estas se muestran a continuación:

Cadena de texto Significado Sustituye a la siguiente entrada en la Crontab
@reboot Una vez, al iniciar el sistema  
@yearly Una vez al año 0 0 1 1 *
@annually Una vez al año 0 0 1 1 *
@monthly Una vez al mes 0 0 1 * *
@weekly Una vez a la semana 0 0 * * 0
@daily Una vez al día 0 0 * * *
@midnight Una vez al día 0 0 * * *
@hourly Una vez cada hora 0 * * * *

Ejecutar scripts con cron

Para combinar la ejecución de varios comandos o programas puede crear un script. Después podrá ejecutar este script programado con tiempo en Cron. A continuación se describe cómo crear un script y una entrada Crontab por medio de un ejemplo:

  • Abra el editor.
  • Inserte el script deseado en el formato siguiente:
    #!/bin/bash
    cp -a /var/www/html/sites /var/www/html/backups
    cp -a /var/www/html/index.php /var/www/html/backups
  • Guarde el script en el directorio /var/www/html/cronscripts. Introduzca un nombre de archivo adecuado.
  • Para poder ejecutar el script sin indicar el intérprete, introduzca el comando siguiente:
    chmod +x /var/www/html/cronscripts/backup.sh
  • Introduzca el comando crontab -e.
  • Inserte una entrada en la tabla Crontab:
    01 04 * * * /var/www/html/cronscripts/backup.sh
  • Para acceder al modo de comando es necesario pulsar la tecla ESC.
  • Introduzca el comando :wq para guardar los cambios.

Visualización de la lista de las tareas cron creadas

Con el siguiente comando puede visualizar una lista de las tareas cron creadas:

crontab -l

Archivos de registro

Todas las acciones ejecutadas por Cron se registran en el archivo $CRON_LOG_FILE. Este archivo se encuentra normalmente en el directorio /var/spool/cron.

Notificaciones

Con la variable MAILTO puede recibir notificaciones por correo electrónico cuando se produzca un fallo al procesar una tarea cron. Esta variable aparece en la tabla Crontab. Si introduce una dirección de correo electrónico, el destinatario recibirá notificaciones sobre todas las acciones ejecutadas por Cron.