Programar la ejecución de un script en Linux

Para programar la ejecución de un script (o un comando) en linux, utilizaremos el comando crontab:

crontab [-u <USUARIO>] { <ARCHIVO> | -e | -l | -r }

  • -u <USUARIO>: Indica el USUARIO del archivo crontab que se va a utilizar
    • Si no se especifica, se utiliza el usuario logueado
  • <ARCHIVO>: indica el archivo que contiene las entradas, crea un nuevo crontab para el usuario y las programa.
  • -e: Edita el contenido del archivo crontab del usuario. Si no existiera, crea uno nuevo.
    • Al salir del editor, se programan las entradas.
  • -r: Quita el crontab actual
  • -l: Muestra el contenido del archivo crontab actual

 

Las entradas de los archivos crontab tienen el siguiente formato:

* * * * *  Script o comando a ejecutar
- – – – -
| | | | |
| | | | +— Día de la semana (0–6) o Sun, Mon, Tue,...
| | | +——— Mes (1–12) o Jan, Feb,...
| | +————— Día del Mes (1–31)
| +——————— Hora (0–23)
+————————— Minuto (0–59)

En los días de la semana, 0 se corresponde a domingo (Sun).

Para todos los campos, se puede especificar:

  • un asterisco * que indica «cualquiera de los valores»
    • se permite especificar un salto de N valores mediante  «*/<N>» (cada n minutos, horas, días, etc.)
      • Ejemplo: */6 en el campo de horas = lista «0,6,12,18»
  • una lista de valores numéricos o textos de 3 letras (para meses y días de la semana) separados por coma
    • Ejemplo: «6,8,9» o «Jan, Mar, Jul»
  • un rango numérico separando con guión medio (-) el menor valor y el mayor (incluídos en el rango) «<MIN>-<MAX
    • Ejemplo «1-4» = «1,2,3,4»
    • se permite especificar un salto de N valores mediante  «<MIN>-<MAX>/<N>» (cada n minutos, horas, días, etc.)
      • Ejemplo: «5-28/3» = lista «5,8,11,14,17,20,23,26»

El script se ejecuta cuando la hora, los minutos, el mes y, el día del mes o de la semana, coinciden con el momento actual.

La aplicación residente cron (se ejecuta en background) consulta los archivos crontab para saber qué ejecutar y cuándo hacerlo.

Por defecto, envía la salida del comando al usuario definido en la variable de entorno MAILTO. Para ver si está definida, podemos imprimirla por línea de comandos:

echo $MAILTO

Para evitarlo, debemos redirigir la salida de STDOUT y STDERR

Ejemplos:

#Ejecutar backup.pl de lunes a viernes a la 1 de la mañana y generar un log

0 1 * * 1-5 ./backup.pl > /var/logs/backup.log 2>&1

#Ejecutar check_filesystem.pl a las 12 del mediodía cada 3 días y también los sábados

0 12 */3 * 6 ./check_filesystem.pl > /dev/null 2>&1

#Ejecutar sync.pl a las 8:30, 11:30, 15:30, 17:30 todos los días entre Marzo y Noviembre, generando el log correspondiente

30 8,11,15,17 * 3-11 * ./sync.pl > /var/log/sync.log 2>&1

#Ejecutar reports.pl a las 8:50 los días 15 y 28 de cada mes

50 8 15,28 * * ./reports.pl > /dev/null 2>&1

#Ejecutar get_mails.pl cada 20 minutos entre las 9 y las 18

*/20 9-18 * * * ./get_mails.pl > /dev/null 2>&1

 

Basado en:

http://unixhelp.ed.ac.uk/CGI/man-cgi?crontab+5

http://ss64.com/bash/crontab.html

Programar la ejecución de un script en Windows

Si queremos que un cierto script se ejecute automáticamente siempre que iniciamos sesión en Windows hay una forma sencilla:

  1. Crear un acceso directo al script (Botón derecho sobre el archivo y luego Crear acceso directo)
  2. Copiar el acceso directo creado al directorio Inicio dentro del Menú inicio:

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup

Si el momento de ejecución queremos definirlo de manera más precisa podemos utilizar el Programador de tareas:

  1. Acceder a Panel de Control > Herramientas administrativas > Programador de tareas
  2. Elegir la opción «Crear tarea…» del panel derecho de Acciones
  3. Definir un nombre y opcionalmente la descripción en la solapa General
  4. Elegir la solapa Desencadenadores y presionar Nuevo… (se puede agregar más de uno)
  5. Configurar cuándo inicia la tarea y cuándo se repite (ej: Semanalmente, Lunes y Viernes)
  6. Elegir la solapa Acciones y presionar Nuevo… (se puede agregar más de una)
  7. Elegir en Acción: Iniciar un programa y presionar Examinar… para elegir nuestro script
  8. Confirmar con Aceptar

De ahora en adelante nuestro script se ejecutará automáticamente según la periodicidad definida.