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.