Tengo un crontab que programa muchas cosas en un servidor Ubuntu que se ejecuta en horario UTC. Algunos de los scripts que se ejecutan son sensibles al tiempo en relación con las aplicaciones web para las que proporcionan funcionalidad.
Por ejemplo, algo debe actualizarse a las 4:00 p. m. todos los días, ya que los usuarios finales lo ven en su reloj.
Esto no es un problema durante el invierno cuando el Reino Unido está en GMT, pero de abril a octubre, los relojes se adelantan una hora para el horario de verano británico (BST). Los scripts que se ejecutan en el servidor actualizan la aplicación web a lo que parece ser a las 5:00 p. m. para los usuarios, en lugar de las 4:00 p. m.
¿Hay alguna forma de ajustar condicionalmente las horas programadas de crontab para este cambio de zona horaria?
La intención a continuación es ejecutar el primer día de cada mes a las 00:00. Durante BST, tengo entendido que esto se ejecutará a la 01:00 BST durante el horario de verano:
# mh dom mon dow user command 0 0 1 * * root cd / && run-parts --report /etc/cron.monthly¿Qué opciones tengo para asegurarme de que esto siempre se ejecute a las 00:00 durante GMT y BST?
Información de zona horaria del servidor
$ timedatectl Local time: Mon 2021-11-01 22:57:41 UTC Universal time: Mon 2021-11-01 22:57:41 UTC RTC time: Mon 2021-11-01 22:57:41 Time zone: Etc/UTC (UTC, +0000) System clock synchronized: yes NTP service: n/a RTC in local TZ: noEspera una hora si estás en GMT:
0 23 0 * * root [ "$(date +'%Z')" == "GMT" ] && sleep 1h; cd / && run-parts --report /etc/cron.monthlyEn mis comentarios anteriores, elogié la respuesta de Cyrus, que pensé que sonaba muy prometedora. Aparentemente, no estuvo de acuerdo y eliminó su respuesta. Oh bien...
Esta podría ser una buena alternativa para ti:
https://www.el-arte-de-la-web.com/system/cron-set-timezone/
Si se encuentra en una zona horaria diferente a la de algunos de sus clientes, o tiene un servidor que usa UTC para evitar los cambios de horario de verano, puede ser complicado configurar un script CRON que se ejecute a la hora correcta en una zona horaria diferente. Aquí exploramos un par de soluciones. ...
[Puede] especificar una zona horaria para CRON:
# mh dom mon dow command TZ=Australia/Sydney 0 0 * * * www-data /usr/bin/php $CRONSCRIPTDesafortunadamente, configurar la zona horaria aquí no tiene ningún efecto sobre cuándo se activa el script CRON. En cambio, lo que hace es establecer una variable de entorno dentro del shell en el que se llama al script. El script en sí puede usar la zona horaria TZ...
# mh dom mon dow command SHELL=/bin/bash TZ=Australia/Sydney 0 * * * * www-data [ "$(date +\%H\%M)" == "0000" ] && /usr/bin/php $CRONSCRIPT¡Éxito! Ahora tenemos un medio para activar un script a medianoche en cualquier zona horaria. El comando CRON se activará cada hora, pero solo continuará ejecutando el script PHP si es medianoche en la zona horaria de destino.
Simplemente sustituya su tarea por "php", ¡y debería estar listo para comenzar!