comment exécuter des tâches cron sur GMT pas l'heure locale?


8

Comment puis-je exécuter des tâches cron sur GMT, pas sur l'heure locale?

voici mon fichier crontab:

#m  h           d   m   wday    command
TZ=GMT
5   0,6,12,18   *   *   *   ~/Documents/bash/transfer.sh

mes travaux semblent s'exécuter à l'heure locale (GMT + 11) J'utilise os x snow leopard, mais je déplacerai le code sur linux une fois le développement terminé.

L'environnement Linux peut être un environnement partagé où je peux avoir moins de contrôle sur la configuration.



Réponses:


8

Toutes les versions de cronprise en charge ne exécutent pas de travaux utilisant un fuseau horaire autre que celui du système.

Si c'est le cas, il est probable que la spécification soit TZ=GMTou TZ=UTC(sans les équerres). Dans certains cas, la variable serait CRON_TZ.

La meilleure chose à faire est de vérifier la documentation spécifique au système particulier. Tu vois man 5 crontab.


3

Si votre heure locale est Europe/London. Alors:

crontab -e    # or 'cru' on some machines
>>>
# Run COMMAND at 03:15am UTC every morning
15 3 * * * [ "$(date +\%z)" = "+0000" ] && COMMAND
15 4 * * * [ "$(date +\%z)" = "+0100" ] && COMMAND
<<<

Un autre exemple:

Si votre horaire normal est +0500décalé de UTC, et votre horaire saisonnier est +0600décalé de UTC. Ajoutez ensuite +5à toutes les heures spécifiées dans l'exemple ci-dessus. Cela signifie être exécuté respectivement à 08:15amet 09:15amde votre heure locale. Ainsi, vos lignes cron modifiées ressembleraient alors à ceci:

crontab -e    # or 'cru' on some machines
>>>
# Run COMMAND at 03:15am UTC every morning
15 8 * * * [ "$(date +\%z)" = "+0500" ] && COMMAND
15 9 * * * [ "$(date +\%z)" = "+0600" ] && COMMAND
<<<

[MODIFIER] Assurez-vous d' \échapper tous les %caractères de pourcentage dans votre fichier crontab. Comme crontab les interprète comme un séparateur de nouvelle ligne. par exemple %-> \%.


1
il y aura des problèmes si vous êtes dans le fuseau horaire qui utilise l'heure d'été, donc (par exemple) votre fuseau horaire est parfois +01: 00 et parfois +02: 00
inemanja

2
Peut-être pourriez-vous élaborer? Je ne pense pas. Nous comptabilisons déjà l'heure d'été. Chaque cas a sa propre ligne cron. 1 pour chacun avec / sans DST.
Dreamcat4

cela devrait être la réponse acceptée, car elle permet à des commandes individuelles des comportements différents
Patrick McCann

0

Vous pourriez peut-être envelopper le binaire crond d'origine.

mv /usr/sbin/crond /usr/sbin/crond.real
cat > /usr/sbin/crond
#!/bin/sh
TZ=GMT
export TZ
exec crond.real ${1+"$@"}

bonjour hlovdal, pourriez-vous s'il vous plaît expliquer ces étapes?
oeil composé

Copiez-vous crond dans crond.real, puis remplacez crond par un court script, dans lequel vous définissez et exportez TZ, puis exécutez crond.real?
oeil composé

Pas copier mais bouger, mais oui le reste de votre analyse est correcte.
hlovdal
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.