Programar tareas con cron

  • OpenWrt puede ejecutar tareas programadas usando el servicio cron.
  • Este tutorial describe el método para configurar tareas cron.
  • Ver también Watchcat para reiniciar según el horario o la conectividad.
  • Ejecutar programas o scripts en un momento específico.
  • Automatizar la gestión de tareas programadas.

Configurar tareas cron usando la interfaz web.

  1. Navegue a LuCI → System → Scheduled Tasks.
  2. Edite la configuración y haga clic en el botón Save.

Configurar tareas cron usando la interfaz de línea de comandos.

# Editar configuración
crontab -e 
 
# Mostrar configuración
crontab -l
 
# Aplicar cambios
service cron restart

Esto editará el archivo de configuración /etc/crontabs/root en el editor vi.

:!: Debe haber un carácter EOL en la última línea del archivo crontab. Simplemente deje una línea vacía al final para estar seguro.

Cada línea es una tarea separada escrita en la especificación:

* * * * * comando a ejecutar
- - - - -
| | | | |
| | | | ----- Día de la semana (0 - 6) (Domingo =0)
| | | ------- Mes (1 - 12)
| | --------- Día (1 - 31)
| ----------- Hora (0 - 23)
------------- Minuto (0 - 59)

Ejemplos de especificación de tiempo:

min
0-59
hora
0-23
día del mes
1-31
mes
1-12
día de la semana
0-6
Descripción
*/5 * * * * Cada 5 minutos
12 */3 * * * Cada 3 horas a los 12 minutos
57 11 15 1,6,12 * A las 11:57 Hrs el día 15 de Ene, Jun & Dic
25 6 * * 1-5 A las 6:25 AM cada día laboral (Lun-Vie)
0 0 4,12,26 * * A la medianoche los días 4, 12 y 26 de cada mes
5,10 9,14 10 * 0,4 A las 9:05AM, 9:10AM, 2:05PM y 2:10PM cada domingo y jueves

:!: 0 (cero) se trata como domingo. Si configura el día de la semana en 7, BusyBox se volverá loco y ejecutará su comando todos los días.

Tabla de atajos:

Atajo Equivalencia Descripción
@reboot Ejecutar una vez, al inicio
@yearly 0 0 1 1 * Cada año
@annually 0 0 1 1 * Cada año
@monthly 0 0 1 * * Cada mes
@weekly 0 0 * * 0 Cada semana
@daily 0 0 * * * Cada día
@midnight 0 0 * * * Cada día
@hourly 0 * * * * Cada hora

:!: Los atajos de tiempo no están habilitados de forma predeterminada. Los accesos directos requieren compilar Busybox con FEATURE_CROND_SPECIAL_TIMES habilitado en las opciones de compilación de Busybox.

Puede leer mensajes de registro con:

logread -e cron

No todos los mensajes se registran, para aumentar el registro cambie la opción nivel de registro cron.

Una solución sencilla para algunos problemas difíciles de resolver (pérdida de memoria, degradación del rendimiento,...) es reiniciar el enrutador periódicamente, por ejemplo cada noche.

Sin embargo, esto no es tan sencillo como parece, ya que el router no suele tener un reloj en tiempo real. Esto podría provocar un ciclo interminable de reinicios.

En el proceso de arranque, el reloj se configura inicialmente mediante “sysfixtime” con la marca de tiempo más reciente de cualquier archivo que se encuentre en /etc. El archivo más reciente es posiblemente un archivo de estado o un archivo de configuración, modificado quizás 30 segundos antes del reinicio iniciado por cron. Entonces, en el proceso de arranque, el reloj se retrasa unos segundos hasta la marca de tiempo de ese archivo. Luego, cron se inicia y unos segundos más tarde nota que el momento de inicio requerido ha llegado de nuevo y se reinicia nuevamente... Al final del proceso de arranque, se inicia ntpd, y también puede pasar un tiempo antes de que ntpd obtenga y establezca la hora correcta, por lo que cron puede iniciar el reinicio en el medio.

Una solución para cron es utilizar un retraso y tocar un archivo en /etc antes de reiniciar.

# Reiniciar a las 4:30 a. m. todos los días
# Nota: Para evitar un bucle de reinicio infinito, espere 70 segundos
# y toque un archivo en /etc para configurar el reloj
# correctamente a las 4:31 a.m. al reiniciar antes de que comience cron.
30 4 * * * sleep 70 && touch /etc/banner && reboot

:!: En muchas plataformas shutdown no funciona; simplemente detendrá la CPU pero no apagará el dispositivo. Por lo general, no hay ningún circuito programable para apagar la unidad. reboot funciona, en caso de que desee reiniciar el enrutador periódicamente.

Una solución sencilla para reiniciar toda su red (lan, wan y wifi) cada 10 minutos es esta:

*/10 * * * * service network restart

Si tiene DST - Hora de verano podría escribirse un bonito despertador. Cuando comienza el horario de verano en Europa Central, los relojes avanzan de las 02:00 CET a las 03:00 CEST del último domingo de marzo. Seis días antes, podría hacer que su WoL le despierte 10 minutos antes. Más tarde no funcionará, llegará tarde. Cuando finaliza el horario de verano en Europa Central, los relojes retroceden de las 03:00 CEST a las 02:00 CET del último domingo de octubre.

# min hora día mes día-de-la-semana comando
59 05 * * 1 /usr/bin/wol -h 192.168.1.255 xx:xx:xx:xx:xx:xx
# crontab debe terminar con la última línea como espacio o comentario

Para mantener un número N de configuraciones/valores en el directorio “/root”, también puede utilizar cron. De esta forma podrá acceder y restaurar configuraciones de los últimos N días. El cronjob se puede ampliar fácilmente para copiar la configuración a otro dispositivo, para poder replicar desde cero en un dispositivo OpenWRT roto.

#Hacer una nueva instantánea de copia de seguridad/configuraciones durante la noche a la 12:01 a. m., conserve las últimas N=100 instantáneas
#01 00 * * * sysupgrade -b "/root/backup-${HOSTNAME}.tar.gz" # <-- mantiene solo una configuración
01 00 * * * find "/root" -type f -name "backup-*.tar.gz" | sort -r | awk 'NR > 100' | xargs rm -f; sysupgrade -b "/root/backup-${HOSTNAME}-$(date +\%Y-\%m-\%d-\%H-\%M-\%S).tar.gz"
This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
  • Last modified: 2023/12/26 18:26
  • by brodrigueznu