Procesos periódicos

De CURE - Informática
Ir a la navegación Ir a la búsqueda

Procesos Periódicos

Objetivos

En GNU/Linux es posible ejecutar procesos automáticamente a una hora determinada, cuando la carga del sistema sea baja, o periódicamente. Esta posibilidad es muy útil para el administrador, ya que le permite automatizar algunas de sus tareas. Por ejemplo, podría diariamente, en momentos de baja carga, ejecutar un proceso que elimine archivos indeseados en el directorio personal de los usuarios. Para hacer uso de estas facilidades se utilizan los comandos cron y at, entre otros. En esta página analizaremos el funcionamiento de algunos de ellos.


Cron

Cron es un demonio que ejecuta procesos o scripts a intervalos regulares (por ejemplo, cada minuto, día, semana o mes). Los procesos que deben ejecutarse y la hora en la que deben hacerlo se especifican en el fichero crontab. El nombre cron viene del griego chronos que significa "tiempo".

Los usuarios habilitados para crear o modificar el fichero crontab se encuentran el el archivo cron.allow, y los usuarios no habilitados se encuentran el el archivo cron.deny, siempre y cuando estos dos últimos existan, si no es asi, se asume que todos los usuarios están permitidos al uso de crontab.


Existen varias formas de trabajar con Cron:

  • Dentro del directorio /etc/ se encuentran los directorios cron.hourly, cron.daily, cron.weekly, cron.monthly, dentro de estos se colocan scripts los cuales seran ejecutados cada una hora, diariamente, semanalmente, o mensualmente dependiendo en el directorio en que se ubique.
  • Editando manualmente el fichero /etc/crontab, en este se especifican las tareas a realizar y el momento de su ejecución.

Formato del fichero crontab: Cada línea representa un trabajo, es formada por una expresión CRON y un comando a ejecutarse.


Ejemplo de un fichero crontab:

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

SHELL: es el "shell" bajo el cual se ejecuta cron.

PATH: contiene o indica la ruta a los directorios en los cuales cron buscará los comandos a ejecutar.

MAILTO: cada vez que se ejecuta el crontab, se envía un mensaje al usuario que aparece en esta variable, si está habilitado, indicándole la tarea realizada.

HOME: es el directorio raíz o principal del comando cron.

Tanto SHELL como HOME si no son especificados se toma por defecto lo indicado en el archivo /etc/passwd.

Sintaxis:

Contiene 7 campos:

1. Minutos (0-59).
2. Horas (0-23).
3. Día del mes (1-31).
4. Mes (1-12).
5. Día de la semana (0-7, siendo 1 lunes, 2 martes, así sucesivamente, 0 y 7 domingo).
6. Usuario que ejecuta el comando.
7. Especifica la ruta del comando a ejecutarse.
.---------------- minuto (0 - 59) 
|  .------------- hora (0 - 23)
|  |  .---------- día del mes (1 - 31)
|  |  |  .------- mes (1 - 12) O jan,feb,mar,apr ... (los meses en inglés)
|  |  |  |  .---- día de la semana (0 - 6) (Domingo=0 o 7) O sun,mon,tue,wed,thu,fri,sat (los días en inglés) 
|  |  |  |  |  .- Usuario que ejecuta el comando
|  |  |  |  |  |
*  *  *  *  * <usuario> <comando para ser ejecutado>

Ejemplo:

25 17 * * * /sbin/reboot 

Todos los días a las 17.25, se hará un reboot en el equipo, siendo ejecutado dicho comando por el usuario root.

-Para especificar dos o mas valores en cada variable, estos deben estar separados por comas.

Por ejemplo: 0, 30 * * * 1 tar -zcf /var/backups/home.tgz /home/ , los días lunes de todos los meses cada media hora ejecuta el comando tar...


Cron tiene capacidad multi-usuario, por lo cual cada usuario puede tener su propio archivo crontab, este archivo se guarda en /var/spool/cron/usuario.

Opciones del comando crontab:

>crontab -e Abre un editor donde se puede crear o editar el archivo crontab.

>crontab archivo.cron Establece el archivo archivo.cron como el cron del usuario

>crontab -l Muestra el crontab actual del usuario.

>crontab -r Elimina el crontab actual del usuario.


Cuando se realizan cambios es necesario reiniciar el servicio:

>service crond restart


  • Comando at: Permite programar la ejecución de comandos o scripts en un momento futuro determinado, las instrucciones se leen desde la entrada estandar y se ejecutan en el momento indicado, la lista de instucciones se culmina con Ctrl+D.

Sintaxis: at hora fecha, varios formatos:

-Sólo HH:MM, se ejecutará en cuanto se llegue a esa hora, siendo posible que en día actual haya pasado y ejecutarse en el siguiente día.

-Puede especificarse solo midnight, noon, o teatime (4pm).

-La hora con AM o PM (ej.: 10PM).

- MMDDYY, MM/DD/YY, DD.MM.YY o YY-MM-DD. Otra forma puede ser con now + (minutes, hours, days o weeks), otra forma es today, o tomorrow (ej.: at 1am tomorrow).

-Los días pueden ser especificados como SUN, MON, TUE, WED, THU, FRI, SAT, y los meses como JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC.


Opciones:

atq o -l Listan los trabajos pendientes del usuario.

atrm o -d Elimina trabajos, identificados por su numero de trabajo (mostrado con atq o -l).


Ejemplo:

at 12.12.2106 21:23 > /etc/init.d/apache stop
> sleep 600
> /etc/init.d/apache start
> ^D

Se ejecutará el 12 de diciembre de 2106 a las 21:23, parará el servidor apache, esperará 10 minutos y volvera a arrancar.

  • Comando nohup: Lanza un proceso y lo independiza del terminal que estamos usando, ignora la señal HUP (señal que se envía a un proceso cuando la terminal que lo controla se cierra). Esto permite que si ejecutamos comando o script mediante nohup y cerramos la terminal el proceso continúa.

Sintaxis: nohup ORDEN ARGUMENTO por defecto la salida del comando se procesa en un fichero llamado nohup.out que aparecerá en la ruta donde nos encontremos al ejecutar el comando.

Anacron

Es usado para ejecutar comandos periódicamente, con una frecuencia especificada en días. A diferencia de cron, anacron no asume que la máquina esta corriendo continuamente, y puede trabajar en máquinas que no estan las 24 hs encendidas. Realiza controles diarios, semanales, y mensuales, los cuales son controlados usualmente por cron. Cuando es ejecutado, anacron lee una lista de trabajo desde un archivo de configuración, normalmente /etc/anacrontab. Este contiene la lista de trabajos que controla anacron.

Sintaxis: contiene 4 campos:

1. Especifica cada cuantos días se debe realizar la tarea.
2. Determina los minutos que transcurren desde que se ejecuta anacron hasta que se lanza la tarea realizada.
3. Nombre de la tarea
4. Comando.

Ejemplo:

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
1 5 cron.daily nice run-parts --report /etc/cron.daily 7 10 cron.weekly nice run-parts --report /etc/cron.weekly @monthly 15 cron.monthly nice run-parts --report /etc/cron.monthly

Anacron busca en /var/spool/anacron el fichero creado para cada tarea en su última ejecución, si encuentra que pasó el periodo en que debía ejecutarse la tarea, lanza la ejecución (por ejemplo, una tarea que se ejecuta semanalmente, lleva 8 días sin ejecutar, entonces la ejecuta).

Algunas opciones:

-f Fuerza la ejecución de las tareas ignorando el momento en que debe ejecutarse.

-n Ejecuta anacron de forma inmediata, ignorando el tiempo de espera indicado en /etc/anacrontab.


Referencias

http://es.wikipedia.org/wiki/Cron_%28Unix%29

Páginas man: cron, crontab, at, nohup, anacron, anacrontab.