Hace ya algún tiempo, cuando os comentaba cómo enviar mensajes con el bot de Twitter, también os dije que lo que podíamos hacer era automatizar su activación, de manera que se pudiera enviar automáticamente cada cierto tiempo.
Cron, muy posiblemente procedente de la palabra griega chronos, es un demonio o proceso desatendido capaz de ejecutar acciones o comandos cada cierto tiempo. Es especialmente potente, ya que acepta casi cualquier tipo de programación: por segundos, minutos, horas, diario, semanal, intervalos, etc…
Yo solo os daré una pequeña pauta para poder lanzar, por ejemplo, el bot de Twitter de manera automática cada hora. Para profundizar mas en el tema, os recomiendo que consultéis la WikiPedia o la documentación específica de Unix, man cron o man crontab.
Bien, vamos al lío. Si recordáis de la anterior entrada, en la que explicábamos cómo lanzar el bot de Twitter, os decía que era posible “publicar el estado de nuestra Pi de manera autónoma y con una cadencia temporal definida”. Esto no es mas que ejecutar el script que creamos en su día cada cierto tiempo, cada hora, por ejemplo.
Cron mantiene una interfaz de configuración bastante intuitiva:
*/5 * * * * /home/user/test.sh
La siguiente tabla define los intervalos en los que se deben ejecutar los comandos deseados:
.---------------- minuto (0 - 59) | .------------- hora (0 - 23) | | .---------- día del mes (1 - 31) | | | .------- mes (1 - 12) O jan,feb,mar,apr ... (los meses en inglés) | | | | .---- día de la semana (0 - 6) (Domingo=0 ó 7) O sun,mon,tue,wed,thu,fri,sat (los días en inglés) | | | | | * * * * * comando para ser ejecutado
Según la tabla anterior, para cada * corresponde un indicador de tiempo. En el ejemplo, hemos decidido que, para todos los minutos (*) con un intervalo de 5 (*/5), y para cada hora, día, etc… se debe ejecutar el comando
/home/user/test.sh
Esta sentencia se debe informar en un fichero de configuración de cron específico por usuario, siendo posible, pues, que ese usuario ejecute sus propios comandos, indistintamente de lo que puedan hacer otros en su mismo caso. Es decir, cron puede ser programado por cualquier usuario independientemente, por lo que un comando puede tener o no validez según quién lo ejecute (hay que tenerlo muy claro a la hora de programarlo!).
Y finalmente, para editar cron de una manera segura y eficiente, lo recomendable es hacerlo con el comando crontab. Crontab ejecutará un editor (por defecto nano) que abrirá (o creará) el fichero de configuración de cron para el usuario actual. Es muy recomendable hacerlo mediante este sistema, ya que tras guardar los cambios se realiza un test de la sintaxis de configuración de cron y, si esta no es correcta, se nos informará tras guardar dicho fichero.
Vamos a ver el caso práctico que nos ocupa.
Creamos un nuevo fichero python con el contenido que queremos que el bot muestre. Éste se llamará temp.py y se encuentra en la misma carpeta que el anterior:
#!/usr/bin/env python import os import sys from twython import Twython CONSUMER_KEY = 'XXXXXXXXXX' CONSUMER_SECRET = 'XXXXXXXXXX' ACCESS_KEY = 'XXXXXXXXXX' ACCESS_SECRET = 'XXXXXXXXXX' api = Twython(CONSUMER_KEY,CONSUMER_SECRET,ACCESS_KEY,ACCESS_SECRET) cmd = 'sudo /opt/vc/bin/vcgencmd measure_temp' line = os.popen(cmd).readline().strip() temp = line.split('=')[1].split("'")[0] statusString = 'I`m alive, and my current CPU temperature is: ' + temp + ' C' api.update_status(status=statusString)
Guardamos el fichero y ahora podemos probarlo:
pi@raspberrypi ~/TwitterBot $ python temp.py
Como vemos, se ha publicado correctamente el twit. Ahora ya podemos editar nuestra tabla de cron, y programarlo para que se ejecute, por ejemplo, una vez cada hora:
pi@raspberrypi ~/TwitterBot $ crontab -e */60 * * * * python /home/pi/TwitterBot/temp.py
Una vez editado, lo guardamos y se iniciará automáticamente, ejecutando el comando que hemos indicado cada hora (*/60, indica para todos los minutos, cada 60 ejecutar…).
Ahora ya tenemos las primeras pautas para ejecutar comandos de manera automatizada. Recordad que es aplicable a cualquier comando que podáis ejecutar desde la shell, sin limitaciones.
Espero que os haya parecido interesante.
Jordi
Me he estado mirando la web, y muchos de las entradas me resultan muy interesantes. Seguro que a mas de uno nos viene muy bien tu guía.
Un saludo
Muchas gracias por tu comentario, intentaré seguir haciéndolo aún mejor, si cabe, en mis próximos posts, y que sea de gran ayuda para todos vosotros.
🙂
Gracias Jordi, llevaba rato buscando esto mismo… Ya que nadie explicaba para python, solo para otros formatos…
De nada amigo, me alegro que te haya servido.
Gracias por tu comentario.
Hola, me gustaria saber si me puedes echar una mano?, he intentado seguir los pasos que indicas pero no logro que se ejecute el scrypt, podrias ayudarme?
Hola, muy buenas Marco, y gracias por tu comentario.
¿En qué estado se te queda? ¿Se lanza, o no se lanza el ejecutable? ¿Has marcado el fichero sh como ejecutable?
Recuerda:
$ chmod +x nombre_ejecutable.sh
¿Puedes ejecutar el .sh a mano sin cron? ¿Obtienes algún error?
Si me das más detalles intentaré ayudarte 😉
Un saludo!
Jordi