Co minutę uruchamiam zadanie, aby ponownie zindeksować treść mojej witryny.
Dzisiaj umarła wyszukiwarka, a kiedy się zalogowałem, były setki sierocych procesów zapoczątkowanych przez crona.
Czy istnieje inny sposób korzystania z istniejącego oprogramowania, które pozwoli mi wykonywać zadanie co minutę, ale nie uruchomi innej instancji, jeśli zadanie to nie zwróci (tj. Ponieważ proces wyszukiwarki nie powiódł się)?
cron
scheduled-task
Jan
źródło
źródło
Odpowiedzi:
Problem tak naprawdę nie dotyczy crona - dotyczy twojej pracy.
Będziesz musiał współpracować z blokadą jakiegoś opisu. Najłatwiej to zrobić, próbując utworzyć katalog, a jeśli się powiedzie, kontynuuj, jeśli nie, zakończ. Po zakończeniu i zakończeniu zadania powinno ono usunąć katalog gotowy do następnego uruchomienia. Oto skrypt do zilustrowania.
Uruchom to w jednym terminalu, a następnie, zanim upłynie 60 sekund, uruchom go w innym terminalu, zakończy działanie ze statusem 1. Po zakończeniu pierwszego procesu możesz uruchomić go z drugiego terminala ...
EDYTOWAĆ:
Kiedy właśnie dowiedziałem się o stadzie, pomyślałem, że zaktualizuję tę odpowiedź. flock (1) może być łatwiejszy w użyciu. W takim przypadku
flock -n
właściwe wydaje się npUruchamia się co minutę, ale kończy się niepowodzeniem, jeśli stado nie może uzyskać blokady pliku.
źródło
Jednym ze sposobów może być utworzenie przez skrypt reindex pliku blokady, aby mógł sprawdzić, czy jest już uruchomiona instancja skryptu. Możesz także dodać obsługę wyjątków, aby sprawdzić, czy wyszukiwarka jest uruchomiona.
Bardziej zaangażowaną alternatywą byłoby użycie pewnego rodzaju kolejki zadań, takiej jak Resque i Resque-scheduler:
https://github.com/blog/542-introducing-resque
https://github.com/bvandenbos/resque-scheduler#readme
Są też Qu i Sidekiq:
https://github.com/bkeepers/qu
https://github.com/mperham/sidekiq
Tak, to wszystko zorientowane na Ruby, ale możesz szukać „rzeczy takich jak resque” w wybranym przez siebie języku.
źródło
Innym sposobem na szybką konfigurację jest uruchomienie skryptu powłoki podczas uruchamiania komputera (cron może to zrobić za pomocą „
@reboot /path/to/my/script.sh
”,., A następnie zrestartować crona, aby go uruchomić) z czymś takim.Skrypt nadal działa, a jeśli dopiero go uruchomiłeś - tyle może być uruchomionych jednocześnie - nie więcej. Niektóre inteligentne urządzenia mogą również sprawdzić, czy indeksator jest uruchomiony, a jeśli nie, zrestartować lub w inny sposób spróbować naprawić / powiadomić kogoś o problemie.
źródło
Zamiast używać do tego crona, zbudowałbym twoją pracę bardziej jako usługę, która działa w pętli i śpi przez 60 sekund jako ostatni krok, a może śpi częściej w mniejszych odstępach czasu w różnych punktach procesu, aby pomóc w rozłożeniu obciążenia bardziej równomiernie.
źródło