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.

œil composé
la source
askubuntu.com/questions/54364/…
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功
unix.stackexchange.com/questions/195818/…
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

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.

En pause jusqu'à nouvel ordre.
la source
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 %-> \%.

Dreamcat4
la source
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+"$@"}
hlovdal
la source
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