El programa Cron, puede que esté dentro de las herramientas más importantes para un administrador de sistemas, cumple uno de los objetivos fundamentales, realizando tareas de forma automática. Delegar tareas es algo bastante delicado, pero podemos estar tranquilos si este programa lo controla.
El formato que comple las entradas que recibe la aplicación, es este:
MIN HOUR DOM MON DOW CMD
Campos Descripción Valores posibles
Min Campo minutos 0 - 59
HOUR Campo hora 0 - 23 (Formato 24 horas)
DOM Día del mes 0 - 31
MON Campo mes 0 - 12
DOW Día de la semana 0 - 6
CMD Cualquier comando que necesitemos que se ejecute PE: /etc/init.d/apache2 restart
Programación de una tarea para una hora y día concreto:
Vamos a programar una tarea para que se ejecute el día 19 de Agosto a las 22:00 y llame al script bonito.sh
00 22 19 08 * /home/mfernandez/scriptsCRON/bonito.sh
00 - minuto 0
22 - 22 horas de la noche
19 - Día 19 del mes indicado
08 - Octavo mes (Agosto - ojú que caló)
* - Todos los días de la semana
/home/mfernandez/scriptsCRON/bonito.sh - script que se ejecutará
Tarea para más de una ejecución (dos veces al día)
Este script hará copias incrementales dos veces al día con cpio. El modo de trabajo es ejecutarlo a las 10:00 (hora del desayuno) y volverlo a ejecutar a las 15:00 (hora de salida), todos los días. La coma que se para los valores de horas, indicará que se ejecute el programa a las horas indicadas.
00 10,15 * * * /home/mfernandez/scriptsCRON/copiasCPIO.sh
00 - minuto 0
10,15 - 10 y 15 horas respectivamente
* - Todos los días de la semana
* - Todos los meses
* - Todos los días de la semana
/home/mfernandez/scriptsCRON/copiasCPIO.sh - script que se ejecutará
Tarea que se ejecuta todos los días en un intervalor dado de horas
Este script se ejecutará durante las horas de trabajo, entre las 8:00 y las 15:00 y almacenará en un log, los niveles de carga de la máquina y el número de sockets de la aplicación Alfresco contra la base de datos Oracle.
00 8-15 * * * /home/mfernandez/scriptsCRON/alfrescoMonitor.sh
00 - minuto 0
8-15 - intervalor de horas en que se ejecutará el script (8:00, 9:00, 10:00, 11:00, 12:00, 13:00, 14:00, 15:00)
* - Todos los días de la semana
* - Todos los meses
* - Todos los días de la semana
/home/mfernandez/scriptsCRON/alfrescoMonitor.sh - script que se ejecutará
El mismo de antes pero para todos los días laborables, excluyendo el fin de semana:
00 8-15 * * 1-5 /home/mfernandez/scriptsCRON/alfrescoMonitor.sh
Ver las entradas del Crontab:
Para un usuario cualquiera del sistema:
mfernandez@paquito$ crontab -l
# Entradas en el cron de Mfernandez
00 22 19 08 * /home/mfernandez/scriptsCRON/bonito.sh
00 10,15 * * * /home/mfernandez/scriptsCRON/copiasCPIO.sh
00 8-15 * * * /home/mfernandez/scriptsCRON/alfrescoMonitor.sh
(Este comando solo mostrará las entradas, para el usuario que lo ejecuta)
Para el usuario root:
root@paquito# crontab -l
no crontab for root
Cómo ver entradas Crontab de otros usuarios
Para ver las entradas en el crontab de otros usuarios, podremos verlos logueando con el usuario root y usando -u {username} -l:
root@paquito# crontab -u mfernandez -l
00 22 19 08 * /home/mfernandez/scriptsCRON/bonito.sh
00 10,15 * * * /home/mfernandez/scriptsCRON/copiasCPIO.sh
00 8-15 * * * /home/mfernandez/scriptsCRON/alfrescoMonitor.sh
Cómo editar las entradas de Crontab.
Edición de Crontab con el usuario que está logueado:
Para edicar las entradas, usaremos crontrab -e. Por defecto, se editará el crontab del usuario que lo ejecuta.
mfernandez@paquito$ crontab -e
# Entradas en el cron de Mfernandez
00 22 19 08 * /home/mfernandez/scriptsCRON/bonito.sh
00 10,15 * * * /home/mfernandez/scriptsCRON/copiasCPIO.sh
00 8-15 * * * /home/mfernandez/scriptsCRON/alfrescoMonitor.sh
(Dependiendo del sistema, se usará un editor u otro, para Debian, se usar Nano, y para sistemas RedHat, Vi)
Editamos las entradas del Crontab de Root
Logueando con el usuario root, escribiremos crontab -e
Editar el crontab de otro usuario, requiere que lo hagamos con el usuario root, y usemos -u {username} -e.
mfernandez@paquito# crontab -u mfernandez -e
# Entradas en el cron de Mfernandez
00 22 19 08 * /home/mfernandez/scriptsCRON/bonito.sh
00 10,15 * * * /home/mfernandez/scriptsCRON/copiasCPIO.sh
00 8-15 * * * /home/mfernandez/scriptsCRON/alfrescoMonitor.sh
Estos son algunos conceptos esenciales y muy usados:
* * * * * CMD
El * significa todas las posibilidades, en este caso sería: Todos los minutos, de todas las horas, durante todo el año. Más usos del * a continuación.
Cuando expecificamos */5 en el campo minutos, significa cada 5 minutos.
Cuando expecificamos 0-10/2 en el campo minuto, significa cada 2 minutos en los primeros 10 minutos.
Así, el convenio anterior, puede ser aplicado a los otros 4 campos.
Programación de una tarea para ejecutarla cada 10 minutos
*/10 * * * * /home/mfernandez/scriptsCRON/alfrescoMonitor.sh
Esto ejecuta el scritp expecificado, cada diez minutos, todos los días a todas horas a lo largo del año.
También existe la posibilidad que permite especificar los valores en los 5 campos de otro modo, se puede hacer usando una sola palabra clave que, comentamos a continuación:
Hay casos especiales en los que en lugar de los campos por encima de los 5, se puede usar @ seguida de una palabra clave - tales como reiniciar el sistema, a medianoche, cada año, cada hora.
Tabla: Palabras especiales del Cron y su significado
Palabra clave Equivalencia
@yearly 0 0 1 1 *
@daily 0 0 * * *
@hourly 0 * * * *
@reboot Run at startup
Programación de una tarea para el primer minuto de cada año con @yearly
Si queremos que una tarea se ejecute el primer minuto de cada año, entonces podrá usarse la palabra clave @yearly.
Que ejecutará una tarea anual de mantenimiento, a las 00:00 de Enero de cada año.
@yearly /home/mfernandez/scriptsCRON/mantenimiento-anual.sh
Programación de una tarea para el primer minuto de cada mes con con @monthly
Esta es la misma que la anterior, pero usando @monthly, la cual se ejecutará cada primero de mes, a las 00:00.
@monthly /home/mfernandez/scriptsCRON/mantenimiento-mensual.sh
Programación de una tarea para el primer minuto de cada día con con @daily
Es como los anteriores, pero en este ejecutaremos un mantenimiento diario cada día a las 00:00.
@daily /home/mfernandez/scriptsCRON/mantenimiento-diario.sh "Comienza el dia"
Programación de una tarea para ser ejecutada justo después de cada reinicio usando @reboot
@reboot /home/mfernandez/scriptsCRON/al-arrancar.sh
Cómo deshabilitar / redirigir la salida de correo de crontab usando la palabra clave MAIL
Crontab por defecto envía el trabajo de salida al usuario que lo programó. Si queremos redirigir la salida a un usuario específico, añadiremos o actualizaremos la variable MAIL como se muestra a continuación.
mfernandez@paquito$ crontab -lMAIL="mfernandez"
@yearly /home/mfernandez/scriptsCRON/mantenimiento-anual.sh
Si deseamos que el email no sea enviado a ninguna parte, bastará con actualizar el mail en el crontab.
*/10 * * * * /home/mfernandez/scriptsCRON/mantenimiento-diario.sh
MAIL=”"
Ejecución de tareas cada segundo en Crontab.
No hay parámetros para programar tareas cada segundo, siendo la unidad mínima los minutos. En un escenario típico, no hay razón para ejecutar tareas cada segundo en el sistema, sobre todo porque sería perjudicial, ya que estaría cargando la máquina demasiado.
Expecificar variables PATH en Crontab
Todos los ejemplos que hemos puesto hasta ahora llevan la ruta completa hasta el script que vamos a ejecutar. Por ejemplo, en vez de /home/mfernandez/scriptsCRON/mantenimiento-anual.sh, podemos expecificar solo mantenimiento-diario.sh, pero para ello deberemos declarar una variable en crontab, que lleve hasta el.
mfernandez@paquito$ crontab -l
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/home/mfernandez/scriptsCRON
@yearly mantenimiento-anual */10 * * * * alfrescoMonitor.sh
Insertar un crontab desde un archivo de cron
En vez de tener que editar directamente crontab, podemos agregar las lineas a un archivo de cron. Una vez tenemos este archivo con las entradas correspondientes, podemos agregarlos al crontab
mfernandez@paquito$ crontab -lno crontab for mfernandez
mfernandez@paquito$ cat entradas-cron.txt
@yearly /home/mfernandez/scriptsCRON/mantenimiento-anual.sh
*/10 * * * * /home/mfernandez/scriptsCRON/alfrescoMonitor.sh
mfernandez@paquito$ crontab entradas-cron.txt
mfernandez@paquito$ crontab -l
@yearly /home/mfernandez/scriptsCRON/mantenimiento-anual.sh
*/10 * * * * /home/mfernandez/scriptsCRON/alfrescoMonitor.sh
Mucho cuidado al crear entradas en el cron desde un fichero, porque las entradas anteriores, se eliminarán para cargar las nuevas, y puede que perdamos información.









Sin comentarios
Post al azar
Deje sus comentario: