Intentando automatizar algunos procesos en unos servidores que uso para Rolteca me he encontrado con la necesidad de tener que crear un par de scripts que lancen unos procesos cada cierto tiempo.
Para sorpresa, la mayor parte de la información que encontré fue desfasada o bastante confusa, así que hoy vamos a ver cómo crear un script que generé jobs en Linux
Bien, lo primero que tienes que saber es que para crear un juego necesitas tener acceso al comando
1crontab
este comando tiene dos parámetros interesantes
1crontab -l
Nos permitirá ver la lista de Jobs dados de alta para el usuario en el que estemos conectados en eses momento
1crontab -e
Este será el que tengamos que utilizar para añadir nuestro Job a la tabla. Por lo normal se suele abrir el documento con nano o vi, y lo podremos editar cómo un fichero de texto más.
La siguiente pregunta obvia es ¿Qué narices tengo que añadir en este fichero del demonio?
Pues bien, un cron en Linux esta formado por dos secciones
1* * * * * "Comando que ejecutar"
2- - - - -
3| | | | |
4| | | | ----- Día de la semana(0 - 7)
5| | | ------- Mes (1 - 12)
6| | --------- Día del mes (1 - 31)
7| -----------Horas (0 - 23)
8------------Minutos (0 - 59
Para la estructura de la fecha, te recomiendo que uses un generador como por ejemplo https://crontab.guru/ para que no te tengas que romper la cabeza.
Además recuerda que el comando para ejecutar debe ser o bien una ruta absoluta o un comando que esté dado de alta para el usuario que estés usando
Groso modo puedes trabajar con cinco opciones, que ocupar en cada uno de esos huecos
Para que el script funcione correctamente debemos hacer 3 cosas, en primer lugar un backup de los jobs actuales. La única forma de añadir nuevos jobs de manera automatizada es reemplazando el fichero actual. Una vez tengamos el backup hecho vamos a añadir una nueva línea con nuestro job acto seguido cargamos el fichero modificado y borramos la copia temporal
1#!/bin/sh
2sudo crontab -l > cron bkp
3sudo echo "* * * * * sudo /home/test.sh >/dev/null 2>>1" >> cron bkp
4sudo crontab cron bkp
5sudo rm cron bkp