5 ejemplos de Crontab para ayudarlo a automatizar las tareas de Linux
El programa cron automatiza la ejecución de otros programas en Linux. Cron es un demonio que se ejecuta continuamente e inicia otros programas de acuerdo con un horario determinado. Varios archivos diferentes definen este horario. Se conocen individualmente como crontabs.
Cron puede programar cualquier comando o tarea de Unix. A veces, querrá trabajar con un comando simple. Otras veces, necesitará escribir un script para realizar la tarea completa. Cron funciona bien con cualquier enfoque. También admite reglas de programación complicadas y formas flexibles de manejar la salida del script.
Ya sea que esté llevando a cabo tareas de usuario simples o una completa administración del sistema, comprender cómo funciona cron utilizando ejemplos prácticos es imprescindible.
1. Limpiar / tmp con una Crontab de todo el sistema
El directorio / tmp es una ubicación temporal para uso general por parte de cualquier programa o usuario del sistema. Muchos sistemas Unix eliminarán archivos antiguos en el directorio / tmp durante el inicio. Otros programan esta operación, a menudo usando cron.
Sin embargo, si desea un control personalizado sobre este proceso, o desea aplicarlo a un directorio diferente, configurar una tarea cron rápida es una manera fácil de hacerlo.
Aquí hay una forma de limpiar / tmp, o cualquier otro directorio de su elección:
1 3 * * * /usr/bin/find /tmp -type f -atime +10 -delete
A las tres y un minuto, todos los días, cron ejecutará este comando. Utiliza el comando de búsqueda para buscar archivos en el directorio / tmp. Filtra todo menos los archivos normales que se modificaron por última vez hace al menos 10 días. A continuación, elimina todos los archivos que encuentra.
Debe agregar un comando como este a un crontab global como / etc / crontab o el crontab de root usando sudo crontab -e . El comando debe ejecutarse como root para que pueda eliminar archivos en / tmp independientemente de quién los posea.
Tenga en cuenta que este ejemplo especifica la ruta completa al comando de búsqueda. Cron usa una configuración PATH básica para buscar ejecutables, por lo que si el comando está en un lugar estándar (como / usr / bin ), esto no es realmente necesario. Puede especificar una RUTA alternativa en el propio crontab si prefiere ese enfoque. Pero usar una ruta completa para los comandos es un poco más resistente.
Si está trabajando en un proyecto que escribe registros o almacena datos en caché, este tipo de enfoque puede ser vital si está eliminando archivos para liberar espacio en el disco. Si bien el ejemplo anterior es un enfoque rápido y sucio, debe usar un comando como tmpwatch , si está disponible.
2. Copias de seguridad de la base de datos dos veces al día
De ahora en adelante, centrémonos en las tareas específicas del usuario que puede administrar a través de su crontab local. Puede editar el crontab de su usuario actual con el siguiente comando:
crontab -e
Este crontab debe contener tareas específicas de su cuenta de usuario. Imagina que estás trabajando en un proyecto que implica llenar una base de datos MySQL. Puede utilizar la herramienta mysqldump para crear un volcado SQL de una base de datos completa. Al redirigir su salida, puede tener copias de seguridad de la base de datos programadas y fáciles.
30 4 * * * /usr/local/mysql/bin/mysqldump --login-path=local --databases albums > /tmp/album-db.$(date +%s).sql
De forma predeterminada, cron envía la salida (incluidos los errores) por correo electrónico al usuario al que pertenece el archivo crontab. Pero puede redirigir la salida de la misma manera que lo haría desde una línea de comando, usando la notación > nombre de archivo .
Observe cómo el ejemplo anterior usa la sustitución de comandos para construir el nombre de archivo basado en la marca de tiempo actual de Unix. Debido a que el símbolo % tiene un significado especial para cron, el comando debe escapar de él con una barra invertida anterior.
3. Comprobación del tiempo de actividad del sitio con un script personalizado
Es posible que haya notado que el comando en el último ejemplo era incómodamente largo. Afortunadamente, no hay nada que le impida guardar comandos en un script y ejecutar ese script a través de su crontab. Aquí hay un ejemplo que ejecuta un script cada minuto:
* * * * * /Users/bobby/bin/site-monitor.sh
Tenga en cuenta que, en teoría, puede usar la variable HOME o la expansión de tilde para un comando más corto:
* * * * * ~/bin/site-monitor.sh
Puede optar por evitar hacerlo, en caso de que cron deje de admitirlo. No hay ningún daño real en usar la ruta completa y podría decirse que es más legible.
El propio script utiliza el programa curl para obtener el código de estado HTTP para una URL determinada. Si el estado indica algo más que éxito, el script escribe un mensaje en la salida.
Como se mencionó anteriormente, cron nos enviará esta salida por correo electrónico. Puede ser útil que los comandos en cron no produzcan resultados en caso de éxito.
#!/bin/bash
STATUS=`curl -s -o /dev/null -I -w "%{http_code}" http://example.com/`
if [ "$STATUS" != "200" ]
then
echo "site appears to be down"
fi
4. Informes de espacio en disco por correo electrónico
Si desea modificar el comportamiento de correo electrónico predeterminado de Cron, puede usar la variable de entorno MAILTO . Cron admite algunas variables que puede configurar en su archivo crontab. Luego, Cron aplica estas variables al entorno de cada comando que sigue.
Para establecer una dirección de correo electrónico de destino alternativa, utilice el siguiente formato:
[email protected]
Deberá ejecutar esto en una máquina que esté configurada para enviar un correo electrónico externo si es necesario. Aquí hay un ejemplo que enviará un correo electrónico a otro usuario en la misma máquina. Funciona dos veces al día, a las 12:00 y a las 23:00. El comando df muestra espacio libre en disco, por lo que esta entrada crontab delega la tarea de verificar que el espacio en disco se vea bien:
MAILTO="sarah"
0 12,23 * * * /bin/df -h
El correo electrónico resultante se verá así:
Tenga en cuenta que cron agrega sus propios encabezados de correo electrónico personalizados. Estos pueden ser útiles para depurar. También puede deshabilitar el comportamiento de correo electrónico predeterminado de Cron usando una cadena vacía:
MAILTO=""
5. Transmitir un mensaje en momentos específicos
Los otros ejemplos utilizan una programación bastante sencilla, pero cron admite una sintaxis potente para las especificaciones de tiempo. No solo maneja coincidencias exactas, sino también:
- Varios valores separados por comas ( , )
- Rangos especificados con un guión ( – )
- Valores de paso después de una barra inclinada ( / )
Entonces, por ejemplo, si desea enviar un mensaje a todos los usuarios que iniciaron sesión, dos veces por hora durante el horario laboral, pero solo cada tres horas, algo como lo siguiente será suficiente:
0 15,45 9-17/3 ? * * * echo 'Enjoy your work!' | wall
Este comando se ejecutará a los 15 y 45 minutos después de la hora, cada tres horas durante el horario de 9 am a 5 pm. El comando de pared envía un mensaje a cada usuario de terminal que haya iniciado sesión.
Incluso puede encontrar que cron ofrece una programación más flexible que su aplicación de calendario. Algunas variaciones le permiten especificar comandos para ejecutar el segundo viernes de un mes o en el día de la semana más cercano a una fecha determinada.
Cron puede automatizar muchos tipos de tareas de Linux
Esta es una pequeña selección del tipo de tareas que cron puede ayudarlo a automatizar. Puede llevar algún tiempo familiarizarse con la sintaxis compleja, pero cron es una poderosa utilidad. Puede usar cron tanto para tareas de todo el sistema como para tareas específicas del usuario.
Con una sintaxis complicada para programar, cron es poderoso, pero probablemente debería tener una buena referencia a mano. Las Crontabs permiten comentarios, por lo que es posible que desee incluir una línea de comentarios en la suya para documentar los campos de tiempo.