¿Cómo Programar una Tarea en una Raspberry Pi?
Programar comandos o scripts en una Raspberry Pi, y en Linux en general, no es fácil para un principiante.
Hay muchos consejos que debes conocer para que funcione siempre, y vamos a verlos en detalle.
Para programar una tarea en Raspberry Pi, existe una herramienta llamada «crontab».
Esta herramienta es útil para ejecutar un script a una hora determinada o al arrancar.
¿Qué es esto? Te lo explicaré 🙂
Si estás empezando con Raspberry Pi o Linux, tengo algo que puede ayudarte de inmediato.
Descarga mi hoja de trucos de comandos Linux gratis – es una guía de referencia rápida con todos los comandos esenciales que necesitas para avanzar con tu Raspberry Pi. Haz clic aquí para obtenerla gratis!
¿Qué es crontab?
Cron
Cron es un servicio, iniciado automáticamente en cada arranque de la Raspberry Pi, que permite al usuario ejecutar comandos programados.
Cada minuto, cron observará si tiene que hacer algo y lo hará.
Lo que vamos a ver hoy es cómo decirle a cron que ejecute nuestro comando o script cuando sea necesario.
Crontab
Un crontab es una herramienta que nos permitirá listar lo que queremos arrancar, en un formato comprensible por el servicio cron.
Un crontab contendrá dos cosas:
– la lista de comandos a ejecutar
– cuándo ejecutarlas
Crontab también es un comando. Aquí está la sintaxis :
crontab [-u user] file crontab [-u user] [-l | -r | -e] [-i] [-s]
Lo que hay que saber :
- u: crontab está abriendo el crontab del usuario actual por defecto, pero puedes especificar cuál abrir (si tienes suficientes privilegios)
- l: listar el contenido actual de crontab
- e: editar el contenido actual de crontab
- r: eliminar el contenido actual de crontab
La mayoría de las veces, sólo utilizará los comandos «crontab -l» o «crontab -e».
Espera, ¡tengo algunas recomendaciones para ti!
Antes de continuar, te invito a descubrir algunos productos que he seleccionado cuidadosamente para ti. Creo que son esenciales para tu Raspberry Pi. Échales un vistazo y pídelos directamente en Amazon.
Una caja silenciosa y práctica | Un SSD de alto rendimiento para potenciar tu Pi | Una pantalla genial para liberar el televisor | Un teclado dedicado con touchpad |
Programar una tarea en Raspberry Pi
Obtiene su archivo PDF gratuito con todos los comandos que necesitas saber sobre Raspberry Pi.
Descargar
Añadir un cron
Es hora de pasar a la acción.
Siga este procedimiento para programar una tarea en su Raspberry Pi:
- Edita el crontab con el comando:
crontab -e
En el primer uso, debes elegir un editor.
Te aconsejo que te quedes en nano, así que mantén la opción por defecto y dale a enter :pi@raspberrypi:~ $ crontab -e
no crontab for pi - using an empty one
Select an editor. To change later, run 'select-editor'.
/bin/ed
/bin/nano <---- easiest
/usr/bin/vim.tiny
Choose 1-3 [2]:- Ya está. Ahora estás en el editor de crontab, que está vacío y puede dar un poco de miedo si es la primera vez que accedes 🙂
Que no cunda el pánico. Te explicaré qué hacer - Todas las líneas que empiezan por # son comentarios y no hacen nada.
Podemos ignorarlos.
Nuestros cambios se harán al final del archivo - Mueva el cursor hasta el final del archivo y pegue esta línea:
* * * * * echo `date` >> /home/pi/log
- Guardar el archivo (CTRL+O y Enter) y salir (Ctrl+X)
Esta simple línea en el crontab nos permitirá ejecutar un comando cada minuto, que escribirá la fecha en un archivo.
Transcurridos unos minutos, el archivo contendrá las fechas de ejecución del comando.
Probablemente se pregunte qué significan las cinco estrellas.
La sintaxis de una entrada en el crontab es la siguiente:
1 2 3 4 5 command
- 1: Minuto (entre 0 y 59)
- 2: Hora (entre 0 y 23)
- 3: Día (entre 1 y 31)
- 4: Mes (entre 1 y 12)
- 5: Día de la semana (entre 0 y 7, a partir del Domingo)
Ejemplo básico
Ahora que entiendes la teoría, veamos un ejemplo sencillo para asegurarnos de que está claro.
Imagine que deseas ejecutar un script de copia de seguridad todos los miércoles a medianoche.
Debe añadir una línea como esta :
0 0 * * 3 /home/pi/backup.sh
Medianoche para los dos primeros 0, y 3 para el día de la semana (miércoles).
Otros ejemplos
Luego hay muchas posibilidades de hacer coincidir el crontab con lo que necesitas.
- Lanzar un script a horas fijas
0 6,12 * * * /home/pi/backup.sh => will run at 6 and 12 only
- Iniciar un script cada 2h
0 */2 * * * /home/pi/backup.sh => will run every 2hours (so 0, 2, 4, 6, ...)
- Programar un script sólo durante los días laborables
0 3 * * 1-5 /home/pi/backup.sh => will not run on Saturday/Sunday
- También puedes iniciar algo al arrancar
@reboot /home/pi/backup.sh => will run at every boot
Añadir depuración
Veremos al final del artículo cómo depurar un cron que no arranca, o no lo hace a la hora prevista.
Pero puede ser más fácil guardar los mensajes mostrados o los errores de script en un archivo.
Para ello, debes añadir una de estas opciones en el crontab:
- Para registrar en un archivo lo que el script habría mostrado en pantalla si lo hubiera lanzado manualmente, debe especificar el nombre del archivo con el carácter «>» :
@reboot /home/pi/backup.sh > /home/pi/log_backup.txt
Pero esta opción borrará el archivo en cada ejecución - Por lo tanto, si deseas añadir una nueva línea al final del archivo, tienes que añadir el carácter «>>», así :
@reboot /home/pi/backup.sh >> /home/pi/log_backup.txt
- Ahora si quieres registrar los errores en otro fichero tienes que añadir este :
@reboot /home/pi/backup.sh > /home/pi/log_backup.txt 2>/home/pi/errors_backup.txt
- Y por último, si quieres guardar los errores y lo mostrado en el mismo archivo, puedes hacerlo así :
@reboot /home/pi/backup.sh > /home/pi/log_backup.txt 2>&1
Ya deberías estar empezando a entender los pequeños trucos, pero por desgracia en informática las cosas rara vez suceden como se espera.
Te daré algunos consejos para solucionar los errores con los crons en tu Raspberry Pi.
Obtiene su archivo PDF gratuito con todos los comandos que necesitas saber sobre Raspberry Pi.
Descargar
Consejos Crontab
Obtiene su archivo PDF gratuito con todos los comandos que necesitas saber sobre Raspberry Pi.
Descargar
Privilegios de usuario
Un error común al crear cron es olvidar tener en cuenta los privilegios del usuario que iniciará el cron.
Por ejemplo, este cron en el usuario por defecto de la Raspberry («pi») no funcionará :
@reboot /usr/sbin/service ssh start
Aparecerá un error como este :
Failed to start ssh.service: Interactive authentication required.
Si utiliza el crontab del usuario actual, el cron se ejecutará con sus privilegios actuales.
Pi no puede iniciar un servicio, por lo que no puede funcionar.
Para que esto funcione, debe añadir esta línea en el crontab raíz (sudo crontab -e) o en el crontab global que se encuentra en /etc/crontab.
Ruta absoluta
Otro error muy extendido al utilizar crons es ignorar la ruta del archivo.
Debe utilizar la ruta completa para que funcione correctamente.
Este cron no funcionará, incluso en el crontab raíz :
@reboot service ssh start
Si no se especifica la ruta absoluta, cron no sabrá dónde se encuentra el archivo de servicio.
Así que tienes que escribir /usr/sbin/service para que este cron funcione.
Presta también atención al contenido de sus scripts.
Por ejemplo, si tienes un script PHP que incluye otro archivo (ej: include «file.php»), y añades este script al crontab, no funcionará.
Tendrás que añadir la ruta absoluta en el include de la función o hacer algo como esto:
@reboot cd /var/www/html; /usr/bin/php test.php
De esta forma, la inclusión se hará en /var/www/html y el script PHP encontrará el archivo «file.php».
Depuración
Además de lo que he escrito arriba, hay otros dos métodos que voy a introducir para depurar tus crons.
Correos electrónicos :
Cron enviará un correo electrónico al usuario si hay un problema con una de sus tareas programadas en el crontab.
Si tienes un servidor de correo instalado en su Raspberry Pi (como se explica aquí, en inglés), puedes comprobar los errores en el archivo de correo electrónico de su usuario.
Puedes instalar uno fácilmente haciendo :
$ sudo apt-get install mailutils
Después, puedes escribir «mail» para leer tus correos electrónicos
Si tienes un servidor de correo electrónico bien configurado, puedes redirigir los correos electrónicos a tu dirección de correo electrónico añadiendo algo como esto a su crontab :MAIL=yourname@provider.com
Syslog :
Syslog es otra valiosa ayuda para comprobar qué ha pasado con tus crons.
Es un archivo de registro ubicado en /var/log/syslog.
Puedes leer los últimos mensajes sobre crons con este comando :
tail -f /var/log/syslog | grep CRON
Y te mostrará los últimos errores, con actualización en tiempo real si se inicia un nuevo cron.
Obtiene su archivo PDF gratuito con todos los comandos que necesitas saber sobre Raspberry Pi.
Descargar
Conclusion
Ahora ya sabes lo que es un cron y un crontab, cómo programar una tarea o un script en Raspberry Pi con muchas opciones y cómo averiguar lo que no funciona como quieres.
Los crons son algo fundamental en Raspberry Pi y Linux en general.
Espero que entiendas mejor como funcionan, te servirá muy a menudo.
Si tienes dudas sobre cómo planificar un cron, debes saber que existen sitios web que te permiten crear tu planificación o comprobar si lo que has hecho es lo que querías.
Por ejemplo, crontab.guru lo hará por ti.
Cuando estés preparado, aquí tienes un atajo para ti:
Domina tu Raspberry Pi en 30 días: Si buscas los mejores consejos para convertirte en un experto en Raspberry Pi, este libro es para ti. Aprende habilidades útiles de Linux y practica múltiples proyectos con guías paso a paso.