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 ?


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

?


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

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?


1

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

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

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

Où est cronredémarré?
DavidPostill

Je n'avais pas besoin de redémarrer cron.
Varun Chandak
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.