lunes, 30 de septiembre de 2019

Cron y crontab explicados de manera sencilla.


                               (P) Hugo Napoli, 2019                              

Cron y crontab: un solo comando y un solo archivo para la automatización de tareas en Linux.


¿Qué es "cron"?
"Un demonio, es un tipo de programa (en sistemas operativos tipo "Linux"), que se ejecuta de manera discreta en segundo plano, en lugar de estar bajo el control directo de un usuario, esperando a ser activado al acontecer un evento específico, o una condición determinada."
(Traducido y adaptado desde http://www.linfo.org/daemon.html)

"Cron" es un demonio -según la definición de demonio que aquí figura- (con un servicio asociado llamado crond), que está listo, normalmente, desde el mismo momento en el que el sistema inicia.
Puede ejecutar órdenes, scripts (o bien, programas) exactamente en los momentos en que se le indique.
Comúnmente, a cron se le indica una hora determinada del día, y se le asigna un script (por ejemplo, uno sencillo en lenguaje BASH para mantener al sistema actualizado), para que lo ejecute.
También se le puede indicar que actúe una o varias veces por mes, por día, o por año, y se le puede pedir que ejecute la cantidad que se necesite de comandos y/o programas.

Cron, permanentemente está ejecutando los comandos o tareas que le hayan sido asignadas, según la información o los archivos contenidos en:
/etc/crontab
/var/spool/cron
/etc/cron.d
/etc/cron.hourly/
/etc/cron.daily/
/etc/cron.weekly/
/etc/cron.monthly/
Esto significa -tal como el sentido común lo indicaría al observar los directorios resaltados en negrita-, que si colocamos un archivo (o varios archivos) script dentro de alguno de estos directorios (o dentro de todos ellos), dicha tarea se ejecutaría:
  • cada hora (/etc/cron.hourly/)
  • todos los días (/etc/cron.daily/)
  • cada semana (/etc/cron.weekly/)
  • cada mes (/etc/cron.monthly/)
Para comenzar, hay un paso previo que deberíamos considerar, y es comprobar que cron se esté ejecutando.
Para ello, en la terminal, correremos el siguiente comando:

sudo service cron status

y veremos algo similar a lo siguiente:


También podemos detener al demonio cron, mediante:

sudo service cron stop

y en ese caso, veremos que la línea

"Active: active (running) since Mon 2019-09-30 16:30:41 -03; 4h 10min ago",
cambiará por
Active: inactive (dead) since Mon 2019-09-30 20:41:10 -03; 3s ago

Ya empieza a ser evidente que podemos reiniciarlo mediante la siguiente instrucción, ¿no es así?

sudo service cron restart

Como las distribuciones Linux no son un calco unas de otras, existen más formas de verificar el funcionamiento de cron, según la distribución de la cual se trate:

/etc/rc.d/init.d/crond status
/etc/init.d/crond status

NOTA: en lugar de "status", también puede escribirse "stop", "start" y "restart".


Antes de continuar, te dejo una guía ultra rápida de Vi, para que puedas controlarlo sin morir en el intento.

i o insert     - inicia la edición
Esc            - finaliza la inserción
:wq    ENTER   - guarda los cambios y sale
:w     ENTER   - guarda (sin salir)
:q!    ENTER   - salir sin grabar
/abeja         - busca la palabra "abeja" dentro del archivo que ha sido abierto con vi
/abeja ENTER n - muestra (cada vez que se pulse la n) todas las palabras "abeja" del documento.
:d     ENTER   - borra la línea en donde esté posicionado el cursor
:y     ENTER   - copia la línea en donde se halla posicionado el cursor
P              - pega, desde donde se halle el cursor, la línea copiada anteriormente

Para copiar varias líneas:
1) Salir del modo edición con Esc.
2) Posicionarse en la primera de las líneas a copiar.
3) Escribir el número de líneas que se quieren copiar y pulsar 2 veces la tecla y. Vi mostrará el mensaje "xx lines yanked".
4) Posicionarse en el renglón en donde se quiere empezar a pegar las líneas y pulsar P (mayúscula).

En la terminal: 
vi prueba.txt 
crea el archivo de texto prueba.txt en el directorio en donde se encuentre el usuario en ese momento
vi "/home/julio/Documentos/prueba.txt"
crea el archivo de texto prueba.txt en el directorio "Documentos" del usuario Julio.

Comandos muy a mano para crontab.

crontab -e: edita o crea un archivo.
crontab -l: lista el contenido de crontab.
crontab -r: elimina un archivo.



Además de lo ya explicado... ¿Admite otras configuraciones, cron?

Claro que sí.
Puede que no nos interese ejecutar un comando, tarea o programa todas las horas, o cada día, semana o mes, y aquí es donde debemos comprender de qué modo podemos comunicarnos con cron.

Para agregar una tarea para que sea ejecutada en un determinado momento "personalizado" (distinto a los que ya nos ofrece el sistema), escribiremos el comando siguiente, con lo cual se abrirá el editor de archivos "vi":

sudo crontab -e

Hay que tener presente que la sintaxis de cron es la siguiente, y por razones prácticas, puede ser leída de derecha a izquierda:

minutos   hora   día   mes   día/s_de_la_semana   comando_o_ruta_a_archivo

Una línea como la siguiente

20 19 * * * eject

abriría la bandeja de la unidad óptica (comando eject) todos los días de la semana (*), todos los meses (*), todos los días (*), a las 19 y 20.

20 19 * * 1-5 eject

abriría la bandeja de la unidad óptica todos los días de la semana (*), todos los meses (*), en los días 1 al 5 (lunes a viernes), a las 19 y 20.

 20 19 * * 2,4,6 eject

abriría la bandeja de la unidad óptica todos los días de la semana (*), todos los meses (*), en los días 2, 4 y 6 (martes, jueves y sábado), a las 19 y 20.



Tarea para estudiantes: resuelve los 5 ejercicios propuestos por el profesor Jesús Fernández Toledo en el siguiente archivo en línea:




Artículo elaborado para los estudiantes de 3º de EMP de Informática de Liceo IEP,
año 2019, asignatura: Sistemas Operativos.

Fecha de creación del artículo: 30/9/2019.
1a revisión: 1/10/2019.


ENTRADA EN REVISIÓN Y CONSTRUCCIÓN


Fuentes consultadas:

Centro Linux

2 comentarios:

  1. Interesante blog, muy informativo me mola mucho ya que voy a estudiar un curso FP Desarrollo de Aplicaciones Web. Un amigo me lo recomendó el es desarrollador de aplicaciones en entornos Web, y me dice que hay buenas salidas laborales, vamos a ver que tal.

    ResponderBorrar
    Respuestas
    1. Muchas gracias por tus palabras, Juan Carlos.
      Coincido con tu amigo en que hay salida laboral en cuanto al desarrollo web.
      Parece muy bueno ese curso. Suerte con él.

      Borrar