Chcę, aby dwa zadania były uruchamiane codziennie, szeregowo, dokładnie w określonej przeze mnie kolejności. Czy ten crontab niezawodnie zrobi to, co chcę?
@daily job1
@daily job2
Zakładam, że oni uruchomić jeden po drugim, ale nie udało mi się znaleźć odpowiedzi, szukając w internecie lub z jednego z tych stron podręcznika: cron(1)
, crontab(1)
, crontab(5)
.
Powyższy crontab oczywiście nie zrobi tego, co chcę, jeśli cron uruchomi rzeczy zaplanowane @daily
równolegle lub w nieprzewidywalnej kolejności.
Wiem, że mogę po prostu wykonać jeden skrypt powłoki, aby je odpalić, po prostu jestem ciekawy, jak powinien działać cron (i jestem zbyt leniwy, aby zbierać dane testowe lub czytać kod źródłowy).
Cron jest dostarczany przez cron
pakiet. System operacyjny to Ubuntu 10.04 LTS (serwer).
cron
paczkę? Prawie wszystkie demony cron, które znam, obsłużą to w kolejności i synchronicznie, zwykle najpierw parsują każdy plik w kolejności alfabetycznej (chociaż niektóre robią to według czasu między kolejnymi uruchomieniami w kolejności rosnącej), a następnie zadań wewnątrz w kolejności liniowej.Odpowiedzi:
Po szybkim spojrzeniu na źródło (w ściśnięciu Debiana, który moim zdaniem jest tą samą wersją), wygląda to tak, jakby wpisy w danym pliku i z tymi samymi czasami były wykonywane w kolejności. W tym celu,
@daily
i0 0 * * *
są identyczne (w rzeczywistości@daily
jest identyczna z0 0 * * *
tą cron).Nie polegałbym na tym na całej planszy. Możliwe, że pewnego dnia ktoś zdecyduje, że cron powinien uruchamiać zadania równolegle, aby skorzystać z tych 32-rdzeniowych procesorów, które mają 31 rdzeni bezczynnych. Można to zrobić podczas implementacji tego 20-letniego elementu todo napotkanego w źródle cron:
Tutaj bardzo łatwo jest napisać
@daily job1; job2
. Jeśli ważne jest, aby zadania były wykonywane w kolejności, uczyń to bezpośrednią konsekwencją tego, co piszesz.Ponadto wyraźne określenie kolejności eliminuje ryzyko, że przyszły administrator zmieni kolejność linii, uważając, że nie będzie to miało znaczenia.
źródło
http://ss64.com/osx/crontab.html (a także inne odniesienia) mówi, że @daily jest równoważne z
który mówi, że ma biec o północy. Spodziewałbym się, że dwie linie tego typu zostaną uruchomione tak blisko północy, jak to możliwe, bez żadnej gwarancji, która z nich będzie pierwsza. Zgadzam się z sugestią jw013 w jego komentarzu:
źródło
@Giles komentuje użycie pojedynczego skryptu podczas importowania, aby uruchamiać rzeczy w odpowiedniej kolejności.
cron.daily
pliki nie określają czasów uruchamiania. Z mojego doświadczenia wynika, że biegną one szeregowo. Ma to sens, jak wiele zadań w tle, które mogą działać na laptopie lub innym systemiePo określeniu czasów uruchamiane są wszystkie zadania zaplanowane na bieżącą minutę. Dobrym pomysłem jest używanie różnych czasów.
Jeśli masz zadania, które wykluczają się wzajemnie, często używa się pliku blokady, aby ustalić, czy inne zadanie jest uruchomione.
źródło
@daily
jest nieco inny niż/etc/cron.daily
. Pierwsza z nich to alternatywna składnia do użycia w crontabie. Zobacz takżerun-parts
. Mój system używarun-parts
do uruchamiania programów/etc/cron.daily
. Według stronyrun-parts(8)
podręcznika: „Pliki są uruchamiane w porządku leksykalnym według ich nazw ...”.