Como programar una tarea en una Raspberry Pi

Publicado por Loli Diéguez en

Programar comandos o scripts en una Raspberry Pi, y en Linux en general, no es fácil para un principiante.

Entonces supongo que te estarás preguntando cómo programar una tarea en una Raspberry Pi. Para esto, tendrás que usar una herramienta llamada Crontab que te permitirá lanzar tareas con el usuario que quieras, al iniciar la Raspberry o cuando tu quieras.

 

¿Qué es crontab?

Cron

Cron es un servicio, que se inicia automáticamente cada vez que arranca la Raspberry Pi, y que permite al usuario ejecutar comandos programados.

Cada minuto, cron observará si tiene que hacer algo y lo hará.

Lo que vamos a ver ahora 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 queramos iniciar, en un formato comprensible para el servicio cron.

Un crontab contendrá dos cosas:

  •  la lista de comandos a ejecutar
  •  cuándo ejecutarlos

Crontab también es un comando en si mismo. Esta es la sintaxis:

archivo crontab [-u usuario]
crontab [-u usuario] [-l | -r | -e] [-i] [-s]

Lo que necesitas saber:

  • u: crontab abre el crontab del usuario actual de forma predeterminada, pero puede especificar cuál abrir (si tiene suficientes privilegios)
  • l: lista 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 solo usará los comandos "crontab -l" o "crontab -e"

¿Cómo programar una tarea?

Veamos un ejemplo de crontab

Es hora de actuar, vamos a planificar una tarea simple, así que abre crontab por primera vez con el comando:

crontab -e

Primero, debes elegir un editor. Te aconsejo que uses nano, así que mantén la opción predeterminada y presiona enter:

pi @ raspberrypi: ~ $ crontab -e
no crontab para pi - usando uno vacío

Selecciona un editor. Para cambiar más tarde, ejecuta 'select-editor'.
  1. / bin / ed
  2. / bin / nano <- - más fácil
  3. /usr/bin/vim.tiny

Elija 1-3 [2]:

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.

Pero no te preocupes, te expliré que hacer:

En primer lugar, todas las líneas que comienzan con # son comentarios, no hacen nada y podemos ignorarlos.

Nuestros cambios se realizarán al final del archivo, mueve el cursor hacia abajo con la flecha inferior y copia esta línea:

* * * * * echo `date` >> / home / pi / log

Guarda el archivo (CTRL + O y Enter) y sal con (Ctrl + X)

Esta simple línea en el crontab nos permitirá ejecutar un comando cada minuto, que escribirá la fecha en un archivo.
Pasados ​​unos minutos, el archivo contendrá las fechas de ejecución del comando.

Probablemente te estarás preguntando qué significan los cinco asteriscos:
La sintaxis de una entrada en el crontab es la siguiente:

1 2 3 4 5 comando
  • 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 comprendes la teoría, veamos un ejemplo simple para asegurarnos de que está claro.
Imagina que deseas ejecutar un script de respaldo todos los miércoles a la medianoche.

Debe agregar 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

Entonces hay muchas posibilidades para hacer coincidir el crontab con lo que necesitas:

  • Lanzar un script a horas fijas
    0 6,12 * * * /home/pi/backup.sh => se ejecutará solo a las 6 y 12
  • Iniciar un guión cada 2 horas
    0 * / 2 * * * /home/pi/backup.sh => se ejecutará cada 2 horas (por lo que 0, 2, 4, 6, ...)
  • Programar un guión solo durante los días de semana
    0 3 * * 1-5 /home/pi/backup.sh => no se ejecutará el sábado / domingo
  • También puedes iniciar algo en el arranque
    @reboot /home/pi/backup.sh => se ejecutará en cada arranque

Añadiendo depuración

Veremos al final del artículo cómo depurar un cron que no arranca, o no arranca en el momento que tienes planeado.
Pero puede ser más fácil guardar los mensajes mostrados o los errores de secuencia de comandos en un archivo.

Para hacer esto, debes agregar una de estas opciones en el crontab:

  1. Para registrar en un archivo lo que el script habría mostrado en la 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.

  2. Entonces, si deseas agregar una nueva línea al final del archivo, debes agregar el carácter ">>", así:
    @reboot /home/pi/backup.sh >> /home/pi/log_backup.txt
  3. Ahora, si deseas registrar errores en otro archivo, debes agregar esto:
    @reboot /home/pi/backup.sh> /home/pi/log_backup.txt 2> /home/pi/errors_backup.txt
  4. Y finalmente, si deseas guardar los errores y los que se muestran en el mismo archivo, puedes hacer esto:
    @reboot /home/pi/backup.sh> /home/pi/log_backup.txt 2> & 1

Deberías comenzar a comprender los pequeños trucos a esta altura, pero desafortunadamente en TI las cosas rara vez suceden como se esperan.

Te daré algunos consejos para corregir los errores con los crons en tu Raspberry Pi.

Consejos de Crontab

Privilegios de usuario

Un error común al crear crons es olvidarse de considerar los privilegios del usuario que iniciará el cron.

Por ejemplo, este cron en el usuario predeterminado de la Raspberry ("pi") no funcionará:

@reboot / usr / sbin / service ssh start

Recibirá un error como este:
No se pudo iniciar ssh.service: Se requiere autenticación interactiva.

Si usas 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, debes agregar esta línea en el crontab raíz (sudo crontab -e) o el crontab global que se encuentra en / etc / crontab

Camino absoluto

Otro error generalizado al usar crons es ignorar la ruta del archivo.
Debes usar la ruta completa para que funcione correctamente.

Este cron no funcionará, incluso en el crontab raíz:

@reboot service ssh start

Si no especificas la ruta absoluta, cron no sabrá dónde está el archivo de servicio, por lo que debes escribir / usr / sbin / service para que este cron funcione.

También presta atención al contenido de los scripts.

Por ejemplo, si tienes un script PHP que incluye otro archivo (por ejemplo, incluye "file.php"), y agrega este script al crontab, no funcionará.
Deberás agregar la ruta absoluta en la función incluir o haz algo como esto:

@reboot cd / var / www / html; / usr / bin / php test.php

De esta forma, la inclusión se realizará en / var / www / html y el script PHP encontrará el archivo “file.php”.

Depuración

Además de esto, hay otros dos métodos para depurar tus crons.

Correos electrónicos:

Cron enviará un correo electrónico al usuario si hay un problema con una de las tareas programadas en el crontab.
Si tienes un servidor de correo instalado en tu Raspberry Pi, puedes verificar los errores en el archivo de correo electrónico de tu usuario.

Puedes instalar uno fácilmente haciendo:

$ sudo apt-get install mailutils

Después de eso, puedes escribir "correo" 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 agregando algo como esto a su crontab:
MAIL=nombre@dominio.com

Syslog:

Syslog es otra ayuda valiosa para verificar lo que sucedió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

Te mostrará los últimos errores, con actualización en tiempo real si se inicia un nuevo cron.

Conclusión

Ahora ya sabes qué es un cron, un crontab, cómo programar una tarea o un script en Raspberry Pi con muchas opciones y cómo descubrir si algo no funcionó como tú deseabas.

Los Crons son algo fundamental en Raspberry Pi y Linux en general.
Espero que entiendas mejor como funcionan.

Si tienes dudas sobre la planificación de un cron, debes saber que hay sitios web que te permiten crear tu planificación o comprobar si lo que hiciste es lo que querías hacer. Por ejemplo, crontab.guru hará esto por ti.

A CONTINUACIÓN TIENES MÁS ARTÍCULOS INTERESANTES

 

 

Compartir esta publicación



← Publicación más antigua Publicación más reciente →