come eseguire cron job su GMT non ora locale?


8

Come posso fare in modo che i lavori cron vengano eseguiti su GMT, non sull'ora locale?

questo è il mio file crontab:

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

i miei lavori sembrano essere in esecuzione all'ora locale (GMT + 11) Sto eseguendo os x snow leopard, ma al termine dello sviluppo sposterò il codice su Linux.

L'ambiente Linux potrebbe essere un ambiente condiviso in cui potrei avere meno controllo sulla configurazione.



Risposte:


8

Non tutte le versioni di cronsupporto eseguono i lavori utilizzando un fuso orario diverso da quello del sistema.

In caso affermativo, è probabile che la specifica debba essere TZ=GMTo TZ=UTC(senza le parentesi angolari). In alcuni casi, la variabile sarebbe CRON_TZ.

La cosa migliore da fare è controllare la documentazione specifica per quel particolare sistema. Vedere man 5 crontab.


3

Se l'ora locale è Europe/London. Poi:

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

Un altro esempio:

Se l'orario normale è il +0500turno di UTC, e il tempo stagionale è il +0600turno di UTC. Quindi aggiungere +5a tutte le ore specificate nell'esempio sopra. Questo significa essere eseguiti a 08:15ame 09:15amdella vostra ora locale, rispettivamente. Quindi le tue cron line modificate appariranno così:

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

[EDIT] Assicurati di \sfuggire a qualsiasi %carattere percentuale nel tuo file crontab. Come crontab li interpreta come un nuovo separatore. es. %-> \%.


1
ci saranno problemi se ti trovi nel fuso orario che utilizza l'ora legale, quindi (ad esempio) il tuo fuso orario a volte è +01: 00 e talvolta +02: 00
inemanja

2
Forse potresti elaborare? Io non la penso così. Abbiamo già conto dell'ora legale. Ogni caso ha la sua cron line. 1 per ciascuno con / senza ora legale.
Dreamcat4,

questa dovrebbe essere la risposta accettata, poiché consente a individiul di comandare comportamenti diversi
Patrick McCann,

0

Forse potresti avvolgere il binario originale della crond.

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

ciao hlovdal, potresti per favore spiegare questi passaggi?
occhio composto

Stai copiando crond in crond.real, quindi sostituendo crond con uno script breve, in cui imposti ed esporti TZ, quindi esegui crond.real?
occhio composto

Non copiare ma spostare, ma sì, il resto dell'analisi è corretto.
hlovdal
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.