He configurado la activación de ACPI para que mi computadora portátil se despierte a una hora determinada cada mañana. La zona horaria para esto es UTC. Quiero configurar mis crontabs también usando UTC para que encajen con la alarma de activación.
¿Cómo lo haces?
He intentado editar /etc/default/cron
para incluir:
TZ="UTC"
Pero no funciona. (También lo he intentado TZ=UTC
y TZ="UTC/GMT"
)
¿Algunas ideas?
sudo service cron restart
después de editar?Respuestas:
Tuve un problema similar en Trusty (14.04). Lo resolvió configurando la zona horaria de la máquina y luego reiniciando el
cron
serviciosudo dpkg-reconfigure tzdata
- siga las instrucciones para seleccionar Región / Paíssudo service cron restart
timedatectl
- Verifique su configuración de fechafuente
date
en la línea de comando para confirmar que la fecha es correcta según sus expectativas.No hay una manera fácil de lograr esto. cron usa la hora local.
/etc/default/cron
y otrasTZ
especificaciones en el crontab solo especifican qué seTZ
debe usar para los procesos iniciados por cron, no afecta la hora de inicio.La mayoría de las soluciones que he visto involucran una utilidad en el medio, por lo que cron comenzaría algo que luego determinaría cuándo patear en UTC (por ejemplo, si sabe que solo le preocupan los cambios de DST, comience 2 horas antes, calcule diferencia horaria, y comience entonces. Eche un vistazo
at
. Para hacerlo, la gente a menudo usaperl
opython
lenguajes de script similares).Hay una forma desagradable de hackearlo si quisieras. cron solo lee la información de TZ del sistema al inicio. Por lo tanto, si este es un servidor en ejecución, puede configurar TZ en UTC, reiniciar y, después del inicio, configurarlo en su zona horaria local. También podrías escribir esto.
Como enfoque alternativo, también eche un vistazo a la
@reboot
sintaxis de cron, que debería ejecutar scripts después del arranque, que suena como lo que podría desear.fuente
Hay un archivo que controla la zona horaria del sistema. Acabo de recibir el mismo problema, aquí está la solución:
Si no ha configurado manualmente ninguna zona horaria, la ejecución
date
debería mostrar la hora UTC.crear una copia de seguridad
eliminar el archivo:
Vivo en Chicago, (es posible que deba cambiar la ruta, usando la ayuda de la tecla de tabulación) así que:
Luego reiniciar. Cuando se inicia el sistema: fecha
ahora su zona horaria debería estar allí ahora, y cron lo verá.
FYI: configurar la variable TZ es una solución temporal, y puede actuar como una "máscara" a veces.
fuente
date
trabajé sin reiniciar, y el reinicio del sistema de barrassudo service crond restart
fue suficiente para arreglar mis tiempos de trabajo cron.A partir de marzo de 2017, descubrí que crond admite la variable CRON_TZ en cada crontab.
- cita de la página de manual de crontab (5)
Esto me permitió especificar el tiempo para ejecutar cada cronjob en hora local, que representaba automáticamente el horario de verano, mientras el servidor permanecía en UTC.
fuente
ls /usr/share/zoneinfo/America
para ver las opciones.OK, me tomé un tiempo y descubrí cómo hacer esto en Ubuntu Natty, y así es como lo hice funcionar. Puede haber una forma más elegante, pero de esta manera funciona.
Primero, necesitamos envolver el ejecutable cron en un shell que establece la variable TZ. Así es cómo:
Luego, cree un nuevo archivo / usr / sbin / cron. Usé vim, pero puedes usar el editor que quieras, solo haz que el archivo se vea así:
Haga que el nuevo archivo cron sea ejecutable:
Ahora, reinicie el demonio cron:
Sus trabajos cron ahora se ejecutarán en un horario basado en UTC - SIN EMBARGO, aunque el tiempo en que se ejecuten será UTC, cuando se ejecuten tendrán la zona horaria establecida en lo que sea definido para el sistema. Para cambiar eso, ponga esto en su crontab antes de cualquier comando:
Entonces su crontab se verá así:
fuente
Ver
/etc/default/cron
. Puede configurarTZ
aquí para -todos- crontabs y debería serTZ=UTC
iirc. Entonces su método debería haber funcionado.Echa un vistazo a fcron . Puede configurar crontabs individuales en diferentes zonas horarias:
timezone-name 'time zone of the system'
Ejecute el trabajo en la zona horaria dada. timezone-name es una cadena que es válida para la variable de entorno TZ: consulte la documentación de su sistema para obtener más detalles. Por ejemplo, "Europa / París" es válido en un sistema Linux. Esta opción maneja los cambios de horario de verano correctamente. La variable de entorno TZ se establece en el valor de la zona horaria cuando se ejecuta un trabajo que define esta opción.
Tenga en cuenta que si da un argumento erróneo de nombre de zona horaria, se ignorará SILENCIOSAMENTE y el trabajo se ejecutará en la zona horaria del sistema.
fuente
Por favor vea mi próximo post para una solución específica de Ubuntu
Sé que este es un foro de Ubuntu, pero creo que la respuesta será muy similar a cómo lo harías en un sistema Red Hat. No tengo un sistema Ubuntu a mano para probar esto, pero lo probé en Red Hat.
Todo lo que necesita hacer es agregar una línea a su script de inicio cron daemon. Establezca y exporte la variable de entorno TZ, así:
Luego reinicia tu cron daemon. Asegúrese de poner esta exportación en el script de inicio de cron daemon DESPUÉS de cualquier otra configuración y fuente de variables: creo que esta puede ser la razón por la cual la edición original del póster del
/etc/default/cron
script no funcionó para él. Tal vez lo configuró, pero luego fue restablecido por otra cosa más abajo en el guión.Tenga en cuenta que esto solo afectará al demonio cron en sí, y no a los trabajos que ejecuta a través de cron, por lo que si desea que un trabajo cron use UTC como su zona horaria, también deberá configurarlo en el trabajo.
Probablemente no pueda copiar este literal y hacer que funcione en un cuadro de Ubuntu, pero aquí está el script de inicio que usé para probar esto en Red Hat. Encontrará la exportación justo antes de la
start()
función:fuente
Acabo de descubrir esto en Ubuntu 14/16. Funcionó perfectamente para mí.
Pasos (sudo implicado):
fuente
¿Qué pasa con la evaluación del tiempo utc en un script de shell? Programe el script de shell para que se ejecute cada hora. En la parte superior del script, obtenga la hora UTC del comando date. Si no es la hora UTC que desea, salga.
Este script se cerrará si no es la 1 a.m. utc.
fuente
Puede establecer la variable de entorno CRON_TZ Si el trabajo cron se ejecuta en un servidor remoto, probablemente debería notar que el shell utilizado por crontab es sh . Puede verificar dos veces en / etc / crontab .
fuente