J'ai configuré le réveil ACPI afin que mon ordinateur portable se réveille à une heure précise chaque matin. Le fuseau horaire correspondant est UTC. Je veux configurer mes crontabs en utilisant également le temps UTC afin qu’elles s’intègrent avec l’alarme de réveil.
Comment faites-vous?
J'ai essayé l'édition /etc/default/cron
pour inclure:
TZ="UTC"
mais ça ne marche pas. (J'ai aussi essayé TZ=UTC
et TZ="UTC/GMT"
)
Des idées?
sudo service cron restart
post-édition?Réponses:
J'ai eu un problème similaire sur Trusty (14.04). Résolu en réglant le fuseau horaire de la machine, puis en redémarrant le
cron
service.sudo dpkg-reconfigure tzdata
- suivez les instructions pour sélectionner une région / un payssudo service cron restart
timedatectl
- Vérifiez vos paramètres de datela source
date
sur la ligne de commande pour confirmer que la date est correcte, conformément à vos attentes.Il n'y a pas de moyen facile d'y parvenir. cron utilise l'heure locale.
/etc/default/cron
et les autresTZ
spécifications de la crontab spécifient simplement ce quiTZ
doit être utilisé pour les processus lancés par cron, cela n’a aucune incidence sur l’heure de début.La plupart des solutions que j'ai vues impliquent un utilitaire situé au centre. Cron lancera donc quelque chose qui déterminera ensuite le moment opportun pour démarrer en UTC (par exemple, si vous savez que vous êtes uniquement préoccupé par les modifications de l'heure d'été, démarrez-le 2 heures différence de temps, et le coup d'envoi puis. Jetez un oeil à
at
. Pour ce faire, les gens utilisent souventperl
oupython
ou langages de script similaires).Il existe un mauvais moyen de le pirater si vous le vouliez. cron ne lit que les informations TZ sur le système au démarrage. Donc, s'il s'agit d'un serveur qui fonctionne toujours, vous pouvez définir TZ sur UTC, redémarrer l'ordinateur et, après le démarrage, le configurer sur votre fuseau horaire local. Vous pouvez aussi écrire un script pour cela.
En guise d’approche alternative, jetez également un coup d’œil à la
@reboot
syntaxe de cron, qui devrait exécuter les scripts après le démarrage, ce qui ressemble à ce que vous pourriez souhaiter.la source
Il y a un fichier qui contrôle le fuseau horaire du système. Je viens de recevoir le même problème, voici la solution:
Si vous n'avez pas configuré manuellement de fuseau horaire, l'exécution
date
devrait afficher l'heure UTC.créer une sauvegarde
supprimer le fichier:
J'habite à Chicago (vous devrez peut-être modifier le chemin en utilisant la touche de tabulation pour vous aider), alors
Puis redémarrez. Au démarrage de votre système: date
maintenant, votre fuseau horaire devrait être là, et cron examinera cela.
FYI: la définition de la variable TZ est une solution temporaire et peut parfois servir de "masque".
la source
date
fonctionné sans redémarrer, et un redémarrage immédiat du système d'exploitationsudo service crond restart
a suffi à corriger les temps de travail cron.Depuis mars 2017, j'ai découvert que crond prend en charge la variable CRON_TZ dans chaque crontab.
- citation de la page de manuel de crontab (5)
Cela m’a permis de spécifier l’heure d’exécution de chaque tâche cron à l’heure locale, qui comptabilisait automatiquement l’heure DST, tandis que le serveur restait en UTC.
la source
ls /usr/share/zoneinfo/America
pour voir les options.D'accord, j'ai pris un peu de temps pour comprendre comment faire cela sur Ubuntu Natty, et voici comment j'ai réussi à le faire fonctionner. Il y a peut-être une manière plus élégante, mais cette façon fonctionne.
Tout d’abord, nous devons intégrer l’exécutable cron dans un shell définissant la variable TZ. Voici comment:
Ensuite, créez un nouveau fichier / usr / sbin / cron. J'ai utilisé vim, mais vous pouvez utiliser l'éditeur de votre choix, il suffit de donner au fichier l'apparence suivante:
Rendre le nouveau fichier cron exécutable:
Maintenant, redémarrez le démon cron:
Vos tâches cron seront maintenant exécutées selon une planification basée sur l'heure UTC - CEPENDANT, même si l'heure de leur exécution est l'heure UTC, leur fuseau horaire est défini sur celui défini pour le système. Pour changer cela, mettez ceci dans votre crontab avant toute commande:
Donc, votre crontab ressemblera à quelque chose comme ça:
la source
Voir
/etc/default/cron
. Vous pouvez définirTZ
ici pour -all- crontabs et il devrait êtreTZ=UTC
iirc. Votre méthode aurait donc dû fonctionner.Regardez fcron . Vous pouvez définir des crontabs individuelles à différents fuseaux horaires:
timezone-name 'time zone of the system'
Exécuter le travail dans le fuseau horaire indiqué. nom-timezone est une chaîne valable pour la variable d'environnement TZ: reportez-vous à la documentation de votre système pour plus de détails. Par exemple, "Europe / Paris" est valable sur un système Linux. Cette option gère correctement les modifications de l'heure d'été. La variable d’environnement TZ est définie sur la valeur de timezone lorsqu’un travail définissant cette option est exécuté.
Veuillez noter que si vous donnez un argument de nom de fuseau horaire erroné, il sera silencieusement ignoré et le travail sera exécuté dans le fuseau horaire du système.
la source
S'il vous plaît voir mon prochain post pour une solution spécifique à Ubuntu
Je sais que ceci est un forum Ubuntu, mais je pense que la réponse sera très similaire à la façon dont vous procéderiez sur un système Red Hat. Je n'ai pas de système Ubuntu à portée de la main pour le tester, mais je l'ai testé sur Red Hat.
Tout ce que vous avez à faire est d'ajouter une ligne à votre script init du démon cron. Définissez et exportez la variable d’environnement TZ, comme ceci:
Puis redémarrez votre démon cron. Assurez-vous de bien placer cette exportation dans le script de démarrage du démon cron APRÈS toute autre configuration de variable et d’approvisionnement. Je pense que c’est peut-être pour cette raison que la modification du
/etc/default/cron
script par l’affiche originale ne fonctionnait pas pour lui. Peut-être l'a-t-il défini, mais il a ensuite été réinitialisé par un élément plus bas dans le script.Notez que cela n'affectera que le démon cron lui-même, et non les tâches que vous exécutez via cron. Par conséquent, si vous souhaitez qu'un travail cron utilise le fuseau horaire UTC, vous devez également le définir dans le travail lui-même.
Vous ne pouvez probablement pas copier ce compte rendu et le faire fonctionner sur une boîte Ubuntu, mais voici le script d’initiation que j’avais utilisé pour le tester sur Red Hat. Vous trouverez l'exportation juste avant la
start()
fonction:la source
Je viens de comprendre cela sur Ubuntu 14/16. A parfaitement fonctionné pour moi.
Étapes (impliquées):
la source
Qu'en est-il de l'évaluation du temps utc dans un script shell? Planifiez le script shell pour qu'il s'exécute toutes les heures. En haut du script, obtenez l'heure UTC à partir de la commande date. Si ce n'est pas l'heure UTC souhaitée, quittez.
Ce script se fermera s'il n'est pas 1h du matin.
la source
Vous pouvez définir la variable d'environnement CRON_TZ Si le travail cron est exécuté sur un serveur distant, vous devriez probablement remarquer que le shell utilisé par crontab est sh . Vous pouvez vérifier sur / etc / crontab .
la source