Mam jeden skrypt php, a ja wykonuję ten skrypt przez crona co 10 minut na CentOS.Jak zapobiec uruchomieniu zadania cron, jeśli jest już uruchomiony
Problem polega na tym, że jeśli zadanie cron zajmie więcej niż 10 minut, rozpocznie się inne wystąpienie tego samego zadania cron.
Próbowałem jeden trick, czyli:
- utworzono jeden plik zamek z kodu php (tak samo jak pliki PID) podczas rozpoczął zadanie cron.
- Usunięto plik blokady z kodem php po zakończeniu zadania.
- Kiedy każde nowe zadanie cron rozpoczęło wykonywanie skryptu, sprawdziłem, czy istnieje plik blokady , a jeśli tak, przerwałam skrypt.
Ale może istnieć jeden problem polegający na tym, że gdy plik blokady nie zostanie usunięty lub usunięty przez skrypt z jakiegokolwiek powodu. Cron nigdy się nie uruchomi.
Czy istnieje sposób, aby ponownie zatrzymać wykonywanie zadania cron, jeśli jest już uruchomiony, z poleceniami systemu Linux lub podobnymi do tego?
Ustaw jako usługę, która wykonuje: 'forever() {do_stuff(); sleep_10_minutes(); } '(pseudokod) – Yetti99
@Leonid Shagabutdinov odpowiedź powinna być uznana za prawidłowe rozwiązanie tego problemu. – Dom
** (Edytuj) Moja sugestia została zamieszczona jako rozwiązanie tylko w przypadku, gdy flock() nie działał, polecam najpierw wypróbować rozwiązanie Jacka. ** Testowałem używając ['flock()'] (http : //php.net/manual/en/function.flock.php), ale z jakiegoś powodu nie zatrzymało wielu wystąpień skryptu cron. Po drobnych poszukiwaniach znalazłem tę klasę i nieco ją zmodyfikowałem na własny użytek: http://abhinavsingh.com/blog/2009/12/how-to-use-locks-in-php-cron-jobs-to- avoid-cron-overlaps/ – h00ligan