Ustawiłem budzenie ACPI, aby mój laptop budził się o określonej godzinie każdego ranka. Strefa czasowa tego czasu to UTC. Chcę skonfigurować crontabs również za pomocą UTC, aby pasowały do alarmu budzenia.
Jak ty to robisz?
Próbowałem edytować, /etc/default/cron
aby uwzględnić:
TZ="UTC"
ale to nie działa. (Też próbowałem TZ=UTC
i TZ="UTC/GMT"
)
Jakieś pomysły?
sudo service cron restart
po edycji?Odpowiedzi:
Miałem podobny problem na Trusty (14.04). Rozwiązano go, ustawiając strefę czasową maszyny, a następnie ponownie uruchamiając
cron
usługęsudo dpkg-reconfigure tzdata
- postępuj zgodnie z instrukcjami, aby wybrać region / krajsudo service cron restart
źródło
date
w wierszu polecenia, aby potwierdzić poprawność daty zgodnie z oczekiwaniami.Nie ma łatwego sposobu na osiągnięcie tego. cron używa czasu lokalnego.
/etc/default/cron
a inneTZ
specyfikacje w crontab określają tylko, jakieTZ
powinny być użyte w procesach uruchamianych przez cron, nie ma to wpływu na czas rozpoczęcia.Większość rozwiązań, które widziałem, zawiera narzędzie w środku, więc cron zainicjuje coś, co następnie określi, kiedy należy uruchomić UTC (np. Jeśli wiesz, że martwisz się tylko zmianami DST, uruchom go 2 godziny wcześniej, oblicz różnica czasu, a następnie kopać go. Zapraszamy do obejrzenia
at
. Aby to zrobić, ludzie często używająperl
lubpython
lub podobnych języków skryptowych).Istnieje nieprzyjemny sposób na zhakowanie go, jeśli chcesz. cron odczytuje informacje TZ z systemu tylko podczas uruchamiania. Więc jeśli jest to zawsze uruchomiony serwer, możesz po prostu ustawić TZ na UTC, zrestartować, a po uruchomieniu ustawić na lokalną strefę czasową. Możesz to również napisać.
Jako alternatywne podejście, spójrz także na
@reboot
składnię crona, który powinien uruchamiać skrypty po uruchomieniu, co brzmi jak możesz.źródło
Jest plik, który kontroluje strefę czasową systemu. Właśnie dostałem ten sam problem, oto rozwiązanie:
Jeśli nie skonfigurujesz ręcznie żadnej strefy czasowej, podczas działania
date
powinna być wyświetlana godzina UTC.utwórz kopię zapasową
usuń plik:
Mieszkam w Chicago (możesz potrzebować zmienić ścieżkę, używając klawiszy tabulacji pomaga), więc:
Następnie uruchom ponownie. Podczas uruchamiania systemu: data
teraz twoja strefa czasowa powinna już tam być, a cron na to spojrzy.
FYI: ustawienie zmiennej TZ jest rozwiązaniem tymczasowym i może czasami działać jak „maska”.
źródło
date
działał bez restartu, a ponowne uruchomienie baru systemu operacyjnegosudo service crond restart
wystarczyło, aby naprawić czasy zadań crona.W marcu 2017 roku odkryłem, że crond obsługuje zmienną CRON_TZ w każdym crontabie.
- cytat ze strony podręcznika crontab (5)
Pozwoliło mi to określić czas wykonania każdego zadania cronjob w czasie lokalnym, który automatycznie uwzględniał czas letni, podczas gdy serwer pozostawał w UTC.
źródło
ls /usr/share/zoneinfo/America
aby zobaczyć opcje.OK, poświęciłem trochę czasu i wymyśliłem, jak to zrobić na Ubuntu Natty, i oto, jak to zrobiłem. Może być bardziej elegancki sposób, ale ten sposób działa.
Po pierwsze, musimy owinąć plik wykonywalny crona powłoką, która ustawia zmienną TZ. Oto jak:
Następnie utwórz nowy plik / usr / sbin / cron. Użyłem vima, ale możesz użyć dowolnego edytora, po prostu spraw, aby plik wyglądał tak:
Ustaw nowy plik cron jako wykonywalny:
Teraz zrestartuj demona cron:
Twoje zadania cron będą teraz działać zgodnie z harmonogramem opartym na UTC - JEDNAK, mimo że czas ich wykonania będzie ustawiony na UTC, to po ich uruchomieniu strefa czasowa zostanie ustawiona na wartość zdefiniowaną dla systemu. Aby to zmienić, umieść to w swoim crontabie przed wszelkimi poleceniami:
Twój crontab będzie wyglądał mniej więcej tak:
źródło
Zobaczyć
/etc/default/cron
. Możesz ustawićTZ
tutaj dla -all- crontabs i powinno to byćTZ=UTC
iirc. Więc twoja metoda powinna była zadziałać.Spójrz na fcron . Możesz ustawić poszczególne tabele crontab w różnych strefach czasowych:
timezone-name 'time zone of the system'
Uruchom zadanie w danej strefie czasowej. timezone-name to ciąg znaków, który jest ważny dla zmiennej środowiskowej TZ: więcej informacji można znaleźć w dokumentacji systemu. Na przykład „Europa / Paryż” jest ważny w systemie Linux. Ta opcja poprawnie obsługuje zmiany czasu letniego. Zmienna środowiskowa TZ jest ustawiona na wartość strefy czasowej, gdy uruchamiane jest zadanie definiujące tę opcję.
Pamiętaj, że jeśli podasz błędny argument nazwa-strefy czasowej, zostanie on CICHO zignorowany, a zadanie będzie działać w strefie czasowej systemu.
źródło
Proszę zobaczyć mój następny post dla rozwiązania specyficznego dla Ubuntu
Wiem, że to forum Ubuntu, ale wierzę, że odpowiedź będzie bardzo podobna do tego, jak zrobiłbyś to w systemie Red Hat. Nie mam pod ręką systemu Ubuntu do testowania tego, ale przetestowałem go na Red Hat.
Wszystko, co musisz zrobić, to dodać wiersz do skryptu inicjującego demona cron. Ustaw i wyeksportuj zmienną środowiskową TZ, w następujący sposób:
Następnie uruchom ponownie demona cron. Upewnij się, że umieściłeś ten eksport w skrypcie startowym demona cron PO jakichkolwiek innych ustawieniach zmiennych i źródłach - myślę, że to może być przyczyną, dla której edytowanie
/etc/default/cron
skryptu przez pierwotnego plakatu nie zadziałało. Może to ustawił, ale potem został zresetowany przez coś jeszcze w dalszej części skryptu.Zauważ, że wpłynie to tylko na samego demona cron, a nie na zadania uruchamiane przez cron, więc jeśli chcesz, aby zadanie cron używało UTC jako swojej strefy czasowej, musisz również ustawić je w samym zadaniu.
Prawdopodobnie nie możesz skopiować tego dosłownie i sprawić, by działało na polu Ubuntu, ale oto skrypt inicjujący, którego użyłem do przetestowania tego na Red Hat. Eksport znajdziesz tuż przed
start()
funkcją:źródło
Właśnie to odkryłem na Ubuntu 14/16. Działa idealnie dla mnie.
Kroki (implikowane sudo):
źródło
A co z oceną czasu utc w skrypcie powłoki? Zaplanuj uruchamianie skryptu powłoki co godzinę. Na górze skryptu pobierz godzinę UTC z polecenia date. Jeśli nie jest to godzina UTC, wyjdź.
Ten skrypt zakończy działanie, jeśli nie jest to 1 rano utc.
źródło
Możesz ustawić zmienną środowiskową CRON_TZ Jeśli zadanie cron jest uruchamiane na zdalnym serwerze, prawdopodobnie powinieneś zauważyć, że powłoką używaną przez crontab jest sh . Możesz dwukrotnie sprawdzić / etc / crontab .
źródło