La gestión eficiente de tareas programadas es esencial para los administradores de sistemas, ya que facilita la ejecución automática de procesos rutinarios. En este contexto, contar con un conjunto sólido de comandos en Linux para programar y controlar tareas se convierte en una herramienta fundamental.

Command sleep

El comando sleep pausa la ejecución en la terminal durante un intervalo de tiempo especificado antes de regresar a la línea de comandos. Puedes indicar el tiempo en segundos, minutos, horas o días. Este comando se encuentra en el paquete coreutils.

  • s : segundos
  • m : minutos
  • h : horas
  • d : días

Ej: sleep 10m –> esperar 10 min

Por sí solo no tiene ninguna utilidad, sin embargo, es muy útil en scripts. Aquí un pequeño ejemplo:

date +"%H:%M:%S"; sleep 5; date +"%H:%M:%S"

Command watch

La utilidad watch es parte del paquete procps (o procps-ng) que está preinstalado en casi todas las distribuciones Gnu/Linux.

Cuando se usa sin argumentos, esta utilidad ejecutará el comando especificado cada dos segundos:

Podemos especificar el tiempo de repetición utilizando el parámetro -n, indicando el intervalo en segundos:

watch -n 5 date –> Cada 5 segundos

Si queremos eliminar el encabezado, es decir, que nos muestre cada cuánto tiempo se repite, utilizamos el parámetro -t:

Si queremos poner un mensaje de error en caso de que el comando no pueda ejecutarse, utilizamos el parámetro -e seguido del mensaje de error:

watch -e ’error'

La opción -b de watch emite un pitido cada vez que el comando sale con un código de estado distinto de cero.

watch -b

Con el parámetro -d nos señala los cambios que han ocurrido en la ejecución del comando: watch -d

Command at

Este comando se usa para ejecutar comandos a una determinada hora, principalmente se usa para programar tareas periódicas como pueden ser las copias de seguridad.

Los principales parámetros son :

  • V :imprime el número de versión en el error estándar y sale con éxito.

  • m :Enviar correo al usuario cuando el trabajo haya finalizado aunque no haya habido salida. -M: Nunca envía correo al usuario.

  • f :archivo Lee el trabajo desde un archivo en lugar de la entrada estándar.

  • t :time Ejecuta el trabajo a la hora, dada en el formato [[CC]YY]MMDDhhmm[.ss]

  • l :Es un alias para atq.

  • r :Es un alias para atrm.

  • d: Es un alias para atrm.

  • b: Es un alias para batch.

  • v: Muestra el tiempo que se ejecutará el trabajo antes de leerlo.

  • Los tiempos mostrados estarán en el formato “Thu Feb 20 14:50:00 1997”.

  • c recoge los trabajos listados en la línea de comandos en la salida estándar.

Podemos programar tareas desde la línea de comandos con echo:

echo “sh copia-seguridad.sh” | at 10:00 PM

A esta tarea se le asignará un número automáticamente. Para listar las tareas que tenemos, invocamos el comando atq.

Si queremos borrar una tarea programada, utilizamos atrm seguido del número de la tarea a eliminar.

Algunos ejemplos para programar tareas son :

  • Dentro de 30 min : at now + 30 minutes
  • 11AM del próximo 14 abril : at 11:00 AM April 14

Command crontab

El comando crontab se utiliza en sistemas UNIX para programar la ejecución de otros comandos, es decir, para automatizar tareas. Podemos ver los crontab programados y también editarlos, lógicamente.

Para verlos, utilizamos este comando: sudo crontab -l Para editarlos: sudo crontab -e

Las tareas cron siguen una determinada sintaxis. Tienen 5 asteriscos seguidos del comando a ejecutar. Ahora explicaré para qué sirve cada cosa.

* * * * * /bin/ejecutar/script.sh

Los 5 asteriscos, de izquierda a derecha, representan:

  • Minutos: de 0 a 59.
  • Horas: de 0 a 23.
  • Día del mes: de 1 a 31.
  • Mes: de 1 a 12.
  • Día de la semana: de 0 a 6, siendo 0 el domingo.

Si se deja un asterisco, quiere decir “cada” minuto, hora, día de mes, mes o día de la semana.

Si queremos que un archivo se ejecute a las 5 de la mañana todos los días: 0 5 \* \* \* ruta_absoluta_del_script

Para que se ejecute dos veces al día a las 6 AM y a las 6 PM: 0 6,18 \* \* \* ruta_absoluta_del_script

Muchas veces tenemos palabras reservadas para facilitar el uso de programas o lenguajes de programación. Cron no podía ser menos, así que tenemos algunas que suelen ser las más comunes. Ya cada uno que lo configure conforme a sus necesidades. Aquí van:

  • @reboot: se ejecuta una única vez al inicio.
  • @yearly/@annually: ejecutar cada año.
  • @monthly: ejecutar una vez al mes.
  • @weekly: una vez a la semana.
  • @daily/@midnight: una vez al día.
  • @hourly: cada hora.

También debemos conocer los usos de los parámetros:

crontab archivo.cron (establecerá el archivo.cron como el crontab del usuario)

crontab -e (abrirá el editor preestablecido donde se podrá crear o editar el archivo crontab). crontab -l lista el crontab actual del usuario y sus tareas cron.

crontab -r elimina el crontab actual del usuario.

Cuando hagamos algún cambio deberemos reiniciar el servicio para asegurarnos de que nuestros cambios surtan efecto:

service cron restart

Estos comandos nos darán la posibilidad de automatizar procesos, haciendo más cómoda y amena la administración de nuestros sistemas.

Bibliografía