¿Cómo ejecutar trabajos cron en GMT no hora local?


8

¿Cómo puedo hacer que los trabajos cron se ejecuten en GMT, no en la hora local?

Este es mi archivo crontab:

#m  h           d   m   wday    command
TZ=GMT
5   0,6,12,18   *   *   *   ~/Documents/bash/transfer.sh

mis trabajos parecen estar ejecutándose a la hora local (GMT + 11) Estoy ejecutando os x snow leopard, pero moveré el código a linux cuando se complete el desarrollo.

El entorno de Linux puede ser un entorno compartido donde puedo tener menos control sobre la configuración.



Respuestas:


8

No todas las versiones de cronsoporte ejecutan trabajos utilizando una zona horaria distinta de la del sistema.

Si el suyo lo hace, es probable que la especificación sea TZ=GMTo TZ=UTC(sin los corchetes angulares). En algunos casos, la variable sería CRON_TZ.

Lo mejor que puede hacer es verificar la documentación específica del sistema en particular. Ver man 5 crontab.


3

Si su hora local es Europe/London. Entonces:

crontab -e    # or 'cru' on some machines
>>>
# Run COMMAND at 03:15am UTC every morning
15 3 * * * [ "$(date +\%z)" = "+0000" ] && COMMAND
15 4 * * * [ "$(date +\%z)" = "+0100" ] && COMMAND
<<<

Otro ejemplo:

Si su horario regular es +0500turno de UTC, y su horario estacional es +0600turno de UTC. Luego agregue +5a todas las horas especificadas en el ejemplo anterior. Esto significa que se ejecuta en 08:15amy 09:15amde su hora local, respectivamente. Entonces sus líneas cron modificadas se verían así:

crontab -e    # or 'cru' on some machines
>>>
# Run COMMAND at 03:15am UTC every morning
15 8 * * * [ "$(date +\%z)" = "+0500" ] && COMMAND
15 9 * * * [ "$(date +\%z)" = "+0600" ] && COMMAND
<<<

[EDITAR] Asegúrese de \escapar de cualquier porcentaje de %caracteres en su archivo crontab. Como crontab los interpreta como un separador de nueva línea. por ejemplo %-> \%.


1
Habrá problemas si está en la zona horaria que usa DST, por lo que (por ejemplo) su zona horaria es a veces +01: 00 y otras veces +02: 00
inemanja

2
¿Quizás podrías dar más detalles? No lo creo. Ya tenemos en cuenta el horario de verano. Cada caso tiene su propia línea cron. 1 para cada uno con / sin horario de verano.
Dreamcat4

esta debería ser la respuesta aceptada, ya que permite comandos individuales de diferentes comportamientos
Patrick McCann

0

Tal vez podría envolver el binario crond original.

mv /usr/sbin/crond /usr/sbin/crond.real
cat > /usr/sbin/crond
#!/bin/sh
TZ=GMT
export TZ
exec crond.real ${1+"$@"}

hola hlovdal, ¿podrías explicar estos pasos?
ojo compuesto

¿Está copiando crond en crond.real, luego reemplaza crond con un script corto, en el que configura y exporta TZ, luego ejecuta crond.real?
ojo compuesto

No copiar, sino mover, pero sí, el resto de su análisis es correcto.
hlovdal
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.