Czy harmonogram zadań cron jest naprawdę precyzyjny?
Mam na myśli, że potrzebuję skryptu, aby uruchamiał się każdej nocy możliwie najpóźniej, ALE przed 00:00 następnego dnia.
Idealnie byłoby uruchomić zadanie crona o 23.59 (lub 23.59), ale czy system będzie naprawdę precyzyjny? Ponieważ sekunda ma znaczenie, czy powinienem ustawić pracę crona na 23:58, aby zostawić ją na jakiś czas?
Odpowiedzi:
Cron może zagwarantować, że praca rozpocznie się nie wcześniej niż w określonym czasie (z zastrzeżeniem dokładności zegara systemowego). Ale nie ma sposobu, aby dać ci jakąkolwiek gwarancję na czas zakończenia pracy. Będzie to zależeć od wielu czynników:
Radzę zmienić projekt tak, aby określony czas realizacji nie był wymagany.
źródło
O_CREAT
i oflaguje,O_EXCL
będzie on atomowy, dopóki plik będzie w lokalnym systemie plików.Przypuszczam, że zależy to od twojego demona cron, ale dokumentacja i standard wskazują, że jeśli określisz minuty, zadanie zostanie wykonane o określonej godzinie.
Widzieć:
Pamiętaj, że twój skrypt zostanie uruchomiony, gdy zegar odmierzy właściwy czas, ale skończy się jakiś czas później.
źródło
Zwykle cron rozpocznie się o 23:59:00 , przeskanuje wszystkie twoje pliki crontab, odfiltruje tych, którzy są istotni dla 23:59, a następnie je uruchomi. Skanowanie tych plików jest bardzo szybkie, ponieważ nie ma ich wiele i wszystkie zawierają tylko kilka wierszy. Zwykle cronjobs zaczynają się o 23:59:00 lub 23:59:01 Istnieją pewne sposoby celowego spowolnienia tego procesu. (na przykład dodaj miliony linii do crontab). Jeśli system jest całkowicie przeciążony, to również nie działa tak szybko.
Jest to oczywiście zależne od implementacji.
Jeśli potrzebujesz bardzo dokładnych czasów rozpoczęcia, lepiej jest stworzyć program, który śpi do żądanego czasu, a następnie uruchamia się (np. Używając c ++ 11 ). Ale w systemie operacyjnym nie działającym w czasie rzeczywistym to również nie będzie dokładne! Również zegar komputera nie zna dokładnego czasu!
We wszystkich przypadkach zapewnia to tylko, że program rozpocznie się (mniej więcej) w żądanym czasie. Nie ma żadnej gwarancji, że program zakończy się sukcesem do określonego czasu, więc mocno wierzę, że powinieneś coś zmienić w związku z tym wymogiem.
źródło
Zależy to od ogólnego czasu wykonania skryptu i precyzji czasu serwera.
uruchomi skrypt dokładnie o 23:59, ale jeśli masz jakieś polecenia, które działają długo, część skryptu może zostać wykonana po północy.
źródło