Guía de cron: qué es y cómo utilizarlo mejor

Guía de cron: qué es y cómo utilizarlo mejor

Cron y crontab son dos aplicaciones nativas muy importantes de los sistemas tipo Unix, que permiten programar las tareas que se van a realizar de forma periódica..

Cron es extremadamente útil para realizar una gran variedad de operaciones: Supongamos, por ejemplo, que se gestiona un servidor remoto, con la necesidad de vaciar a una hora indecente (por ejemplo, a las 3 de la mañana) la carpeta de registro del cortafuegos. Gracias a Cron y crontab no será necesario levantarse y conectarse al servidor remoto, sino que se podrá «ordenar» al sistema operativo que lo haga de forma autónoma.

Sin embargo, Cron y crontab no son lo mismo: crontab es la aplicación que -en términos sencillos- permite a los usuarios programar operaciones, mientras que cron es el demonio que se acuerda de ejecutarlas. Básicamente, cron «vigila» ciertas carpetas (que varían de un sistema a otro) para ejecutar operaciones.

Veamos cómo utilizar y configurar cron y crontab.

Guía de cron

Comprender si cron se está ejecutando en el sistema

Aunque algunas distribuciones (en particular las que todavía se basan en upstart) no lo han abandonado, es posible que las distribuciones más modernas, basadas en Systemd, hayan sustituido cron por los propios temporizadores de Systemd. Para comprobar que el servicio cron está activo (debe serlo para que la programación funcione) en una distribución basada en systemd, abra un terminal y escriba

systemctl status cron

y asegúrese de que la salida (específicamente la línea que define el servicio «Activo») tiene el siguiente aspecto:

Para verificar que cron está activo en los sistemas operativos basados en upstart, simplemente escriba

service cron status

Programar un comando con cron/crontab

Crontab es el nombre de la aplicación y al mismo tiempo el nombre de los archivos utilizados para ejecutarla; para evitar confusiones, en esta guía definiremos crontab la aplicación y «archivo cron» archivos de configuración. De hecho, los «cronfiles» son archivos con una sintaxis muy específica que «instruyen» a cron sobre qué hacer y cuándo.

Existen dos tipos de crontabs/archivos de control: los locales, es decir, los relacionados con las operaciones realizadas en el nivel de ejecución del usuario, y los del sistema, que deben residir en carpetas específicas y que definen operaciones que también pueden realizarse en el nivel de ejecución del núcleo. La diferencia es sutil pero muy importante en términos de seguridad:: en el CRÓNICAS DEL SISTEMA puede hacer que se realicen operaciones con el privilegios de rootmientras que en el archivo cronológico del usuario cada operación especificada en ellos se ejecuta sólo con el permisos del usuario que programó las operaciones..

Empecemos por entender cómo escribir un archivo cronfile de usuario. Para proceder sin problemas, primero debemos definir:

  • el comando/operación a ejecutar;
  • el día o los días de la semana para ejecutarlo;
  • la frecuencia de ejecución anual (¿cada mes? ¿meses concretos?);
  • frecuencia de ejecución mensual (¿todos los días del mes? ¿sólo días concretos?).
  • el ritmo de ejecución diario (¿a qué horas? ¿cada cuántos minutos?).

Como ejemplo, supongamos que queremos utilizar cron/crontab para crear un «despertador» que reproduzca un archivo de audio diariamente. Las preguntas anteriores, en nuestro ejemplo, se responderían así:

  • el comando a ejecutar es vlc (/usr/bin/vlc) para reproducir un archivo llamado Tfpa.mp3 (en /home/malefika/music);
  • El despertador debería sonar. todos los días de la semana, Domingo excluido;
  • el despertador debe estar encendido durante todo el mes de marzo;
  • el despertador debe sonar todos los días del mes (Se excluyen los domingos, pero esto se trata en el punto superior);
  • el despertador debe sonar a las siete en punto todos los días.

Para «alimentar» a crontab y así activar esta rutina, todo debe ser traducido siguiendo la sintaxis precisa del cronfile, que tiene una plantilla similar a la que se ve a continuación – una línea para cada comando y una última línea vacía, lo cual es importante porque de lo contrario cron no ejecutará las rutinas:

minuto(0-59) ora(0-23) giorno(mese,1-31) mese(1-12) giorno(settimana,0-6) comando 1
minuto(0-59) ora(0-23) giorno(mese,1-31) mese(1-12) giorno(settimana,0-6) comando 2
minuto(0-59) ora(0-23) giorno(mese,1-31) mese(1-12) giorno(settimana,0-6) comando 3
riga vuota (altrimenti il cron non va)

Los días de la semana deben asociarse a los números del 0 al 6, siendo el 0 = domingo y el 6 = sábado; evidentemente, también es posible especificar el comodín (el asterisco, *) que significa «todos». No se recomienda en absoluto utilizar el comodín en el campo de los minutos, porque de lo contrario se corre el riesgo de ejecutar la misma operación en bucle.

También puede especificar periodos espaciados pero bien definidospor ejemplo: si quiere realizar la operación en los meses de marzo, abril y julio, puede escribir en el campo del mes la cadena «03,04,07» (sin comillas);

Para seguir perfectamente la plantilla de crontab, traduzcamos en «pseudocódigo» el despertador que queremos poner:

  • el comando: /usr/bin/vlc /home/malefika/musica/Tfpa.mp3
  • el período semanal (todos los días de la semana, excepto el domingo): 01,02,03,04,05,06
  • el período anual (sólo en marzo): 03
  • el período mensual (todos los días): *
  • la hora (a las 7, recordando que sintácticamente los minutos van primero): 00 07

Ahora sólo tienes que leerlo todo de abajo a arriba, separar cada línea de la lista en la parte superior con un espacio, y ahí tienes la línea para que la alarma se ejecute como un comando, lista para ser copiada en nuestro cronfile:

00 07 * 03 01,02,03,04,05,06 /usr/bin/vlc /home/malefika/musica/Tpfa.mp3

Para estar seguros, pongamos un segundo despertador (con una canción diferente) para que suene un cuarto de hora más tarde:

15 07 * 03 01,02,03,04,05,06 /usr/bin/vlc /home/malefika/musica/sveglia2.mp3

El archivo cron para el despertador está ahora completo; todo lo que tienes que hacer es copiar las dos líneas en un archivo de texto plano vacío en tu directorio personal…

00 07 * 03 01,02,03,04,05,06 /usr/bin/vlc /home/malefika/musica/Tpfa.mp3
15 07 * 03 01,02,03,04,05,06 /usr/bin/vlc /home/malefika/musica/sveglia2.mp3
riga vuota (altrimenti il cron non va)

…y guardarlo como Despierta, también en la página de inicio. Ahora todo lo que queda es invocar el comando crontab para añadir la alarma al demonio que gestiona el crontab (crond), de modo que cron pueda ejecutarla cuando lo desee. Desde el terminal, simplemente escriba

cd ~
crontab cronsveglia

Si todo ha ido bien, las operaciones se añadirán a cron. Ahora sólo tienes que reiniciar el servicio: si estamos en un sistema basado en systemd, tendrá que escribir

sudo systemctl restart cron

mientras que en los sistemas basados en Upstart tendrá que escribir

sudo service crontab restart

Por último, para verificar que el crontab se ha añadido, tendrá que escribir desde el terminal:

crontab -l

El resultado debería ser algo parecido a esto:

malefika:~$ crontab -l
00 07 * 03 01,02,03,04,05,06 /usr/bin/vlc /home/malefika/musica/Tpfa.mp3
15 07 * 03 01,02,03,04,05,06 /usr/bin/vlc /home/malefika/musica/sveglia2.mp3

En cambio, para eliminar todos los crons activos relacionados con el usuario actual, simplemente escriba el comando

crontab -r

Para más detalles, le remitimos a las páginas del manual de cron

man 8 cron #per cron
man crontab #per crontab
man 5 crontab #per i file di configurazione

TIPO: también hay un servicio online que permite crear crontab en unos pocos clics, útil para tenerlo siempre disponible, lo puedes encontrar en esta página.