jak uruchamiać zadania cron na GMT, a nie w czasie lokalnym?


8

Jak sprawić, aby zadania cron działały w GMT, a nie w czasie lokalnym?

to jest mój plik crontab:

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

moje zadania wydają się być uruchomione w czasie lokalnym (GMT + 11). Pracuję w systemie OS X Snow Leopard, ale po zakończeniu programowania przeniesię kod na Linux.

Środowisko linux może być środowiskiem współdzielonym, w którym mogę mieć mniejszą kontrolę nad konfiguracją.



Odpowiedzi:


8

Nie wszystkie wersje cronobsługują uruchomione zadania przy użyciu strefy czasowej innej niż system.

Jeśli tak, prawdopodobnie specyfikacja powinna być TZ=GMTlub TZ=UTC(bez nawiasów kątowych). W niektórych przypadkach zmienną będzie CRON_TZ.

Najlepiej jest sprawdzić dokumentację dotyczącą konkretnego systemu. Zobaczyć man 5 crontab.


3

Jeśli masz czas lokalny Europe/London. Następnie:

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
<<<

Inny przykład:

Jeśli twój regularny czas to +0500zmiana UTC, a twój czas sezonowy to +0600zmiana UTC. Następnie dodaj +5do wszystkich godzin określonych w powyższym przykładzie. Oznacza to bycie prowadzony na 08:15ami 09:15amod czasu lokalnego odpowiednio. Zatem zmodyfikowane linie cron wyglądałyby następująco:

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
<<<

[EDYCJA] Pamiętaj o \dodaniu %znaków procentowych w pliku crontab. Ponieważ crontab interpretuje je jako separator nowej linii. np. %-> \%.


1
pojawią się problemy, jeśli znajdujesz się w strefie czasowej, która korzysta z czasu letniego, więc (na przykład) twoja strefa czasowa wynosi czasami +01: 00, a czasami +02: 00
inemanja

2
Być może mógłbyś opracować? Nie wydaje mi się Mamy już rozliczenie DST. Każda skrzynia ma własną linię cron. 1 dla każdego z / bez DST.
Dreamcat4

to powinna być zaakceptowana odpowiedź, ponieważ pozwala na indywidualne polecenia różnych zachowań
Patrick McCann

0

Być może mógłbyś owinąć oryginalny plik binarny crond.

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

cześć hlovdal, czy mógłbyś wyjaśnić te kroki?
oko złożone

Czy kopiujesz crond do crond.real, a następnie zastępujesz crond krótkim skryptem, w którym ustawiasz i eksportujesz TZ, a następnie uruchamiasz crond.real?
oko złożone

Nie kopiowanie, ale przenoszenie, ale tak, reszta analizy jest poprawna.
hlovdal
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.