Problema di fuso orario con cron


11

I miei lavori cron vengono calcolati un'ora dopo rispetto all'ora del server. Non capisco cosa stia succedendo.

La mia configurazione è la seguente:

Orario del server :

Europe/Paris

In / etc / default / cron ho aggiunto la seguente riga:

TZ="Europe/Paris"

Nonostante ciò, i cron job vengono lanciati un'ora dopo l'orario del server. Ciò che è davvero complicato, è che se chiedo a cron di riprodurre l'istruzione "date", dà la data del server (quella buona!).

Non ho idea di come risolvere questo problema; Sto leggendo nei forum, ma non ho trovato nulla di interessante.

Cosa pensi ?


4
Quindi i lavori cron sono in programma in UTC. La pagina man cron di Vixie dice "Il demone utilizzerà, se presente, la definizione da / etc / timezone per il fuso orario". Cosa c'è dentro /etc/timezone? Hai modificato /etc/timezonepiù di recente rispetto all'avvio del cronprocesso? Ci hai provato /etc/init.d/cron restart?
Keith Thompson,

3
/ etc / timezone è stato modificato di recente, senza riavviare /etc/init.d/cron. Proverò a riavviarlo.
Guillaume Lebourgeois,

Risposte:


16

(Copia il mio commento come una risposta, dal momento che si è rivelata la soluzione; ho indovinato bene.)

Quindi i lavori cron vengono pianificati in UTC ( Europe/Parisè a un'ora di offset da UTC).

La pagina man cron di Vixie dice:

Il demone utilizzerà, se presente, la definizione da / etc / timezone per il fuso orario.

Cosa c'è dentro /etc/timezone? Hai modificato /etc/timezonepiù di recente rispetto all'avvio del processo cron? Hai provato

/etc/init.d/cron restart

?


3

Alcune distro come Fedora forniscono un meccanismo in cui è possibile impostare la CRON_TZ=sostituzione del fuso orario predefinito.

Dalla Fedora man 5 crontab

La variabile CRON_TZ specifica il fuso orario specifico per la tabella cron. L'utente deve inserire un orario in base al fuso orario specificato nella tabella. Il tempo utilizzato per scrivere in un file di registro è tratto dal fuso orario locale, dove è in esecuzione il demone.

Qualcosa come questo:

#m  h           d   m   wday    command
CRON_TZ="Europe/Paris"
5   0,6,12,18   *   *   *       /path/to/script.bash

1

Dice Wikipedia

La maggior parte delle implementazioni cron semplicemente interpretano le voci crontab nell'impostazione del fuso orario del sistema in cui viene eseguito il demone cron stesso. Ciò può essere fonte di controversie se una grande macchina multiutente ha utenti in diversi fusi orari, specialmente se il fuso orario predefinito del sistema include l'ora legale potenzialmente confusa. Pertanto, un'implementazione cron può in casi particolari qualsiasi riga di impostazione della variabile d'ambiente "TZ =" nei crontab dell'utente, interpretando le voci crontab successive relative a quel fuso orario

Quindi forse il tuo ID di accesso ha un'impostazione TZ diversa dall'impostazione TZ del sistema?


1

Riavviare cron era ciò di cui avevo bisogno, ma per me il comando era

/etc/init.d/crond restart (crond not cron)

0

L'ho appena scoperto su Ubuntu 14/16. Ha funzionato perfettamente per me.

Passaggi (sudo implicito):

  1. cat /etc/timezone
  2. rm -fv /etc/localtime
  3. ln -s /usr/share/zoneinfo/Asia/Kolkata /etc/localtime
  4. apt install -y --reinstall tzdata
  5. /etc/init.d/rsyslog restart
  6. tail -f /var/log/syslog
  7. cat /etc/timezone

Dove cronviene riavviato?
DavidPostill

Non ho avuto bisogno di riavviare cron.
Varun Chandak,
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.