Widziałem kilka rozwiązań, w tym oglądanie i uruchamianie w tle skryptu zapętlonego (i uśpionego), ale nic nie było idealne.
Mam skrypt, który musi być uruchamiany co 15 sekund, a ponieważ cron nie obsługuje sekund, muszę wymyślić coś innego.
Jaki jest najbardziej niezawodny i wydajny sposób uruchamiania skryptu co 15 sekund na systemie UNIX? Skrypt musi również działać po ponownym uruchomieniu.
Odpowiedzi:
Używałbym crona do uruchamiania skryptu co minutę i sprawiał, że skrypt uruchamiał twój skrypt cztery razy z 15-sekundową przerwą między uruchomieniami.
(Zakłada się, że skrypt działa szybko - jeśli nie, możesz dostosować czasy uśpienia).
W ten sposób uzyskasz wszystkie korzyści,
cron
a także 15-sekundowy okres pracy.Edycja: zobacz także komentarz @ bmb poniżej.
źródło
Jeśli nalegasz na uruchomienie skryptu z crona:
i zamień nazwę i ścieżkę skryptu na / foo / bar / your_script
źródło
* * * * * sleep 15; php /foo/bar/your_script
#!/usr/bin/php
na początku skryptu php i uczynić go wykonywalnymZmodyfikowana wersja powyższego:
dodaj do / etc / crontab:
źródło
Czy nie uruchomisz tego w tle?
To jest tak wydajne, jak to tylko możliwe. Ważna część jest wykonywana tylko co 15 sekund, a skrypt śpi przez resztę czasu (dzięki czemu nie marnuje cykli).
źródło
&
na końcu linii 3. W każdym razie nie jest to uruchamiane co 15 sekund. Działa co „15 sekund + jak długoecho hello
trwa”. Co może wynosić 0,01 sekundy; może trwać 19 godzin.Program planujący napisałem szybciej niż cron. Zaimplementowałem również nakładającą się osłonę. Możesz skonfigurować program planujący, aby nie rozpoczynał nowego procesu, jeśli poprzedni nadal działa. Spójrz na https://github.com/sioux1977/scheduler/wiki
źródło
Użyj nanosleep (2) . Wykorzystuje strukturę,
timespec
która służy do określania przedziałów czasu z dokładnością do nanosekund.źródło
źródło
Od czasu mojej poprzedniej odpowiedzi wymyśliłem inne rozwiązanie, które jest inne i być może lepsze. Ten kod umożliwia wykonywanie procesów ponad 60 razy na minutę z dokładnością do mikrosekund. Aby to zadziałało, potrzebujesz programu usleep. Powinien być dobry do 50 razy na sekundę.
źródło
Aby uniknąć możliwego nakładania się wykonania, użyj mechanizmu blokującego opisanego w tym wątku .
źródło