Programación de tareas en Linux (Parte 1: Cron)

 La mayoría de las distribuciones Linux  suelen poseer un programa predeterminado, conocido como Cron, con el que se pueden automatizar tareas (lo cual no implica, como siempre, que no existan otros programas que se puedan emplear para lo mismo). Otro programa predeterminado que puede haber para programar tareas en Linux es Anacron. En ambos casos estos programas se ejecutan constantemente, es decir, son servicios del sistema operativo.
  Estos servicios pueden ser editados y gestionados por un usuario con los permisos adecuados (generalmente el superusuario).
  El demonio (así es como se suele llamar a los servicios en Linux) Cron suele ser parte del sistema operativo Linux predeterminadamente, pero es posible que alguna distribución no lo tenga, en cuyo caso, se puede instalar como cualquier otro paquete de Linux (lo que varía según el tipo de distribución; en una distribución de tipo debian, el comando para un superusuario será apt-get install cron, por ejemplo).
 Este demonio asume que el sistema siempre funciona, por lo que no es recomendable programar tareas con él que se deban ejecutar mientras un equipo esté apagado, ya que no se ejecutarán jamás.
  Aunque se asume que Cron está siempre funcionando, lo que sucede en la mayoría de las ocasiones, no está de más comprobar que esto es así mediante el comando service cron status, o alguno de los otros comandos de gestión de servicios en Linux. También es posible detener, iniciar o reiniciar manualmente el demonio si el usuario lo cree necesario y tiene los permisos apropiados.
  Los archivos más importantes implicados en el uso de Cron son:
  • Fichero de configuración: "crontab", dentro del directorio "etc". Sólo está disponible para un superusuario. También es donde se programan las tareas.
  • Fichero de informes: "cron", que se encuenta en la ruta "/var/log/".
  • Ficheros de permisos: "cron.allow" y "cron.deny", dentro del directorio "etc". Se pueden editar (como superusuario) y escribir los nombres de los usuarios que pueden utilizar el servicio (en "cron.allow") o aquellos que no pueden hacerlo (en "cron.deny"). Si se quiere restringir el uso de Cron a todos los usuarios, bastará con añadir la línea "echo ALL" en el archivo "cron.deny".
  Hay dos formas de trabajar con Cron: Mediante programadores temporales y mediante el fichero "crontab".

PROGRAMADORES TEMPORALES

  Se trata de varias carpetas (o directorios) que se encuentran en el directorio "/etc/", donde se pueden introducir guiones que se ejecutarán en el intervalo temporal al que pertenezca la carpeta:
  • cron.hourly: Cada hora.
  • cron.daily: Cada día.
  • cron.weekly: Cada semana.
  • cron.monthly: Cada mes.

FICHERO "CRONTAB"

   Como se ha comentado más arriba, este fichero sirve para configurar el Cron y para programar tareas. En este último caso, guarda la lista de comandos a ejecutar en el tiempo especificado por un usuario.
  El fichero se encuentra dentro del directorio "/etc/", y únicamente puede manipularlo un superusuario. No obstante, hay una versión de este fichero para otros usuarios alojada en la ruta "/var/spool/cron/".
  El archivo "crontab" comienza con cuatro líneas:
  1. SHELL: Es el tipo de línea de comandos bajo el que se ejecuta Cron (normalmente "/bin/bash"). Si no hay uno especificado, se empleará predeterminadamente el especificado en la línea del archivo "passwd" del usuario que ejecute el servicio en ese momento.
  2. PATH: Aquí se encuentra la ruta donde Cron buscará los comandos a ejecutar, que no es la misma que la ruta global del sistema o del usuario.
  3. MAIL TO: Donde se envía la salida del comando (si la hay). Este servicio enviará un correo explicando la tarea realizada a quien esté especificado en esta variable (usuario válido del sistema o de otro sistema). Si no se especifica, enviará el correo al usuario propietario del comando que se ejecuta.
  4. HOME: Se trata del directorio raíz del Cron. Si no se especifica, este será el que se indique en el archivo "passwd" del usuario que ejecute Cron en ese momento.
  Tras estas líneas iniciales, y una línea comentada con "#", vienen las líneas que ejecutan las tareas programadas. Estas líneas están formadas por 7 campos ordenados, de izquierda a derecha, del siguiente modo:
  • Minuto: Se trata del minuto de la hora en que se ejecutará el comando (0-59).
  • Hora: Controla la hora en la que se ejecutará el comando. Está en formato de 24 horas (0-23; "0" es medianoche).
  • DíaMes: Especifica el día mensual en que se quiere ejecutar el comando.
  • Mes: Mes en el que ejecutará el comando. Se puede indicar numéricamente (1-12), o con las 3 primeras letras del nombre del mes en inglés.
  • DíaSemana: Día semanal en el que se ejecutará el comando. Se puede indicar mediante número (0-7; "0" y "7" equivalen a domingo según la zona horaria donde esté configurado el sistema operativo), o usando las 3 primeras letras del nombre del día en inglés.
  • Usuario: Aquel que ejecuta el comando. Este campo es obligatorio.
  • Comando: Comando, guión o programa que se desea ejecutar. Este campo puede contener múltiples palabras y espacios (en ocasiones se debe indicar la ruta completa del origen del guión o programa a ejecutar).

   En los cinco primeros campos se deben tener en cuenta ciertas particularidades:
  • El valor "*" indica todo, es decir, el inicio-fin del campo.
  • Se pueden especificar listas como valores en los campos ("1,2,3,4,..."; "1-5").
  • Es posible utilizar incrementos como valores en los campos. El formato del incremento es: (valor o lista)/incremento (por ejemplo: "1-10/2", "*/15", "2/4").
  El modo más sencillo de editar el archivo "crontab" es empleando el comando crontab -e (usando sudo si se quieren programar tareas como superusuario). Si se utiliza como superusuario, se abrirá el archivo "crontab" de "/etc/", y si no es así, se abrirá el del usuario desde "/var/spool/cron/", que tiene el nombre que le dé el usuario cuando lo crea al ejecutar dicho comando [otro modo de hacer esto es editando normalmente un archivo con líneas de tareas en la ruta antes especificada, guardarlo y darle un nombre mediante el comando crontab (nombre del archivo de Cron)].
   Si un usuario desea comprobar qué tareas hay programadas, deberá utilizar el comando crontab -l. Si lo que necesita es eliminar las tareas programadas rápidamente, deberá ejecutar sudo crontab -r.
  Un superusuario puede asignar tareas programadas a cualquiera de los usuarios del sistema si añade el parámetro "-u (nombre del usuario)" al comando crontab del siguiente modo: sudo crontab -u (nombre de usuario) -e.
  El superusuario puede emplear el mismo sistema tanto para consultar las tareas programadas de otro usuario (comando sudo crontab -u (nombre de usuario) -l), como para eliminarlas (comando sudo crontab -u (nombre de usuario) -r).

  Espero que esta entrada del blog haya sido útil al lector. De ser así, aguardo que la comente y/o la comparta, por favor.

No hay comentarios:

Publicar un comentario

Deje aquí su comentario, si no puede comentar, pruebe a hacerlo desde otro navegador de red u otro equipo.