Problème de fuseau horaire avec cron

11

Mes tâches cron sont calculées une heure plus tard par rapport à l'heure du serveur. Je ne comprends pas ce qui se passe.

Ma configuration est la suivante:

Heure du serveur:

Europe/Paris

Dans / etc / default / cron, j'ai ajouté la ligne suivante:

TZ="Europe/Paris"

Malgré cela, les tâches cron sont lancées une heure plus tard que l'heure du serveur. Ce qui est vraiment délicat, c'est que si je demande à cron de jouer l'instruction "date", cela donne la date du serveur (la bonne!).

Je n'ai aucune idée de la façon de résoudre ce problème; J'ai fait de la lecture sur les forums, mais je n'ai rien trouvé d'intéressant.

Qu'est-ce que tu penses ?

Guillaume Lebourgeois
la source
4
Des tâches cron sont donc planifiées en UTC. La page de manuel Vixie cron dit: "Le démon utilisera, s'il est présent, la définition de / etc / timezone pour le fuseau horaire." Qu'y a-t-il /etc/timezone? Avez-vous modifié /etc/timezoneplus récemment que le cronprocessus a commencé? As-tu essayé /etc/init.d/cron restart?
Keith Thompson
3
/ etc / timezone a été modifié récemment, sans redémarrer /etc/init.d/cron. Je vais essayer de le redémarrer.
Guillaume Lebourgeois

Réponses:

16

(Copier mon commentaire comme réponse, car il s'est avéré être la solution; j'ai deviné juste.)

Les tâches cron sont donc planifiées en UTC ( Europe/Parisà une heure de décalage par rapport à UTC).

La page de manuel Vixie cron dit:

Le démon utilisera, s'il est présent, la définition de / etc / timezone pour le fuseau horaire.

Qu'y a-t-il /etc/timezone? Avez-vous modifié /etc/timezoneplus récemment que le processus cron a commencé? As-tu essayé

/etc/init.d/cron restart

?

Keith Thompson
la source
3

Certaines distributions telles que Fedora fournissent un mécanisme où vous pouvez définir CRON_TZ=pour remplacer votre fuseau horaire par défaut.

De la Fedora man 5 crontab

La variable CRON_TZ spécifie le fuseau horaire spécifique à la table cron. L'utilisateur doit entrer une heure selon le fuseau horaire spécifié dans le tableau. L'heure utilisée pour écrire dans un fichier journal provient du fuseau horaire local, où le démon s'exécute.

Quelque chose comme ça:

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

Wikipédia dit

La plupart des implémentations cron interprètent simplement les entrées crontab dans le paramètre de fuseau horaire du système sous lequel le démon cron lui-même est exécuté. Cela peut être une source de litige si une grande machine multi-utilisateurs a des utilisateurs dans plusieurs fuseaux horaires, en particulier si le fuseau horaire par défaut du système inclut le DST potentiellement déroutant. Ainsi, une implémentation cron peut cas particulier toutes les lignes de réglage de variable d'environnement "TZ =" dans les crontabs utilisateur, interprétant les entrées crontab suivantes par rapport à ce fuseau horaire

Alors peut-être que votre ID de connexion a un paramètre TZ différent du paramètre TZ système?

RedGrittyBrick
la source
1

Redémarrer cron était ce dont j'avais besoin mais pour moi la commande était

/etc/init.d/crond restart (crond not cron)
arx-e
la source
0

Je viens de comprendre cela sur Ubuntu 14/16. A parfaitement fonctionné pour moi.

Étapes (sudo implicite):

  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
Varun Chandak
la source
Où est cronredémarré?
DavidPostill
Je n'avais pas besoin de redémarrer cron.
Varun Chandak