Cambia il fuso orario di un cronjob


10

Ho un cronjob che viene eseguito ogni giorno alle 9:00 di ora UTC. Sono in GMT + 1, quindi viene eseguito alle 10:00 ora locale. Quando si verifica la modifica del fuso orario (ora legale, ora legale), il cronjob viene eseguito ancora alle 9:00 AM-UTC-time ma alle 11:00 ora locale. Ma voglio che venga sempre eseguito alle 10:00, indipendentemente dall'ora legale o meno. Come lo faccio?


4
Questa domanda è cross-pubblicato su StackOverflow: stackoverflow.com/questions/29592533/...
John1024

Qual è il tuo fuso orario impostato su / etc / timezone?
Scintilla il

Risposte:


2

Controlla le tue impostazioni in / etc / timezone. Nella domanda che hai menzionato sei in "GMT + 1", se questo è il fuso orario impostato, lo script verrà sempre eseguito su UTC più un'ora. Se lo si imposta, ad esempio, su "Europa / Parigi", l'ora di esecuzione cambierà con l'ora legale.


6

Questo probabilmente dipenderà dal tuo sistema operativo e dalla sua implementazione cron. Questo non è possibile per l'attuazione cron più popolare, vixie/isc cron. Dal crontab(5) manpage:

LIMITATIONS
       The  cron  daemon  runs with a defined timezone. It currently does not 
       support per-user timezones. All the tasks: system's and user's will 
       be run based on the configured timezone. Even if a user specifies  
       the TZ  environment  variable  in  his crontab this will affect only 
       the commands executed in the crontab, not the execution of the crontab 
       tasks themselves.

2

Espandendo sulla risposta di @Cyrus questo è quello che ho fatto:

Ho realizzato uno script che ha verificato un offset UTC:

#!/bin/bash
export TZ=":US/Eastern"
if [ "$(date +%z)" == "$1" ]; then
  shift
  exec $@
fi

Quindi aggiungo due voci crontab ciascuna per l'offset che desidero:

0 8 * * * run-only-with-tz.sh -0400 place_your_command_here
0 9 * * * run-only-with-tz.sh -0500 place_your_command_here

1

Dalla pagina del manuale:

Il demone utilizzerà, se presente, la definizione di /etc/timezoneper il fuso orario.

L'ambiente può essere ridefinito nelle definizioni crontab dell'utente, ma cron gestirà le attività in un solo fuso orario.


1

Sposta il tuo cronjob alle 8:00 e dormi un'ora se sei in GMT + 1

0 8 * * * [ "$(date +\%z)" = "+0100" ] && sleep 3600; place_your_command_here

Cosa succede se la tua TZ è il Nord America?
swdev,
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.