lunes, 6 de octubre de 2014

Programar con crontab la ejecucion de 2 comandos de forma consecutiva, no concurrente, en Linux

Recientemente he estado trabajando con mi Raspberry pi que por cierto esta muy interesante para hacer cosillas, he estado haciendo un proyecto que próximamente actualizare en mi github y para el cual estoy utilizando una computadora del tamaño de una tarjeta de crédito es decir una Raspberry pi.

Actualmente corriendo Raspbian(version de linux derivada de Debian) tuve la necesidad de ejecutar dos tareas una seguida de la otra y programarlas a cierta hora.

Tenia la opción de crear una schedule (fecha y hora) para ejecutar cada una, sin embargo no quería jugar con el tiempo en que terminara una para que iniciara la otra, sino más bien quería que cuando terminara una iniciara la otra.

Primero lo que queria era cerrar el navegador epiphany (que actualmente fue incluido en la versión de Raspbian) y posteriormente apagar el equipo.

Ejecutando el comando:

crontab -e

se tiene acceso a las tareas programadas, este caso ingrese utilizando sudo pues el comando shutdown es ejecutado por un usuario con privilegios.

sudo crontab -e

Basicamente para lograr que un comando se ejecute terminado el anterior se debe incluir && después de cada comando en la cadena del crontab, para entender mejor les enseño como lo realice yo:

# m h  dom mon dow   command
58 17 * * * /usr/bin/pkill -x epiphany-browse && /sbin/shutdown -h now 

Como se puede apreciar en la linea anterior ejecuto el comando pkill (dar man pkill en consola para saber más de el) y cierro el proceso que corre epiphany-browse una vez que termina de cerrar(matar) el proceso continua con el apagado del equipo.

Como ven es muy sencillo realizar este tipo de ejecución consecutiva de comandos en crontab.