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

złożone oko
źródło
askubuntu.com/questions/54364/…
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功
unix.stackexchange.com/questions/195818/...
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

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.

Wstrzymano do odwołania.
źródło
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. %-> \%.

Dreamcat4
źródło
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+"$@"}
hlovdal
źródło
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