Vamos a dar la receta para usar el comando cron y poder sacarle partido a las tareas automáticas.
Cron es un administrador regular de procesos en segundo plano (demonio) que ejecuta procesos 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.
Cron se podría definir como el “equivalente” a Tareas Programadas de Windows.
yum install vixie-cron.i386
crontab [-u usuario] [ -e | -l | -r ]
-e (editar el crontab)
-l (listar los cron)
-r (borrar los cron configurados)
-i (pregunta antes de borrar los cron configurados)
-s (selinux context)
Por ejemplo, si queremos listar los cron que tiene el usuario ususario1:
crontab -u usuario1 -l
Si tenemos creado el fichero cron, podemos añadirlo al usuario de este modo crontab [-u user] file
crontab -u usuario1 /home/usuario1/cron
Si no especificamos el usuario con la opción -u, estaremos editando los cron de root
-
Restringir el uso del comando cron:
Es posible permitir o denegar a los usuarios la creación de estas tareas. Para ello hay que editar el fichero cron.allow (para permitir) y cron.deny (para denegar).
Simplemente, habría que poner los usarios uno en cada línea. Suelen estar estos ficheros en /etc/
Al editar el cron de un usuario, con la opción “-e” nos abrirá el editor definido en la variable de entorno. Si queremos cambiar el editor por defecto, debemos especificarlo en .bashrc de tu usuario o de root, con estas líneas:
export VISUAL="vim"
export EDITOR="vim"
No hay que olvidarse de recargar el bashrc:
source ~/.bashrc
En el fichero crontab, podemos especificar algunas variables como son:
SHELL - indica el entorno ‘shell’ en la que se ejecuta el cron
PATH – especifica la/s ruta/s donde buscará los binarios a ejecutar
MAILTO - cuenta de email, donde se mandará un correo al finalizar la tarea
HOME – directorio raiz que tomara el cron
Por ejemplo:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
Su sintaxis, es muy sencilla. Esta compuesto de 5 dígitos o asteríscos “*” separados por espacio y el comando a ejecutar.
##########################################################
#minuto (0-59), #
#| hora (0-23), #
#| | día del mes (1-31), #
#| | | mes (1-12), #
#| | | | día de la semana (0-6 donde 0=Domingo) #
#| | | | | comandos #
##########################################################
15 02 * * * /script/actualiza.sh
Hay que puntualizar, que se pueden poner varios valores en un mismo ‘campo’ de esta forma:
Se ejecutaría el comando who todas las horas, en los minutos 2, 10, 20 y 45
2,10,20,45 * * * * /usr/bin/who
También es posible usar “/x” en los minutos, horas, días para indicar un intervalo, cada x minutos, cada x horas, cada x diás.
Ejecutar el comando who cada 5 minutos:
*/5 * * * * /usr/bin/who
Para evitar que nos mande el email una vez haya completado la tarea, podemos redirigir la salida de este modo.
Cada dos horas, borrar los ficheros temporal*:
* */2 * * * rm -f /home/usuario1/tmp/temporal* > /dev/null 2>&1
Si nos resulta útil, también podemos redirigir la salida a un fichero de texto de este modo, a modo de log:
Todos los días a las 5:00, listaría los ficheros de la carpeta /home/usuario1/tmp/
0 5 * * * ls -las /home/usuario1/tmp/ >> /home/usuario1/cron.txt
Es muy importante poner dos “>>” para que cada vez escriba al final del archivo, ya que de poner sólo uno “>”, cada vez que se ejecute nos macharía la salida anterior. También hay que tener en cuenta la salida del cron ya que de ser muy grande, podemos crear un log de mucho tamaño.
Por último, recordar que el signo # sirve para comentar, tanto una linea que no queremos que se ejecute, como algún comentario que hayamos puesto.
Por si sirve de ayuda, aquí tenéis un generador.
Entradas relacionadas
Etiquetas: Comandos Linux, tareas programadas linux