Oprócz innych odpowiedzi, zwłaszcza linku opublikowanego przez @soulcake: Jeśli zaplanujesz długo działające polecenie ze zbyt krótkimi przerwami, cron z przyjemnością wykona drugie przed zakończeniem pierwszego (chyba że w poleceniu zaimplementowano jakiś muteks) .
To często spowalnia pierwotne polecenie jeszcze bardziej, prowadząc do uruchomienia innej instancji przed zakończeniem poprzednich, itp. Lub może być niepożądane z innych powodów.
Ogólnym sposobem zapobiegania jest warunek uruchomienia polecenia z osłoną, która zapewnia, że poprzednie polecenie nie jest uruchomione. Na przykład:
10 * * * * pgrep my_slow_command >/dev/null || /usr/local/bin/my_slow_command
Upewnij się, że pgrep pasuje do nazwy polecenia, gdy jest uruchomione, np. Skrypty Pythona mają python jako nazwę pliku wykonywalnego, co prawdopodobnie nie jest wystarczająco szczegółowe i musisz dopasować również do nazwy skryptu pytona.
10 * * * * pgrep -f my_script.py || /usr/local/bin/my_script.py
(pgrep bez opcji -f pasuje jednak do nazw skryptów bash)
Jeśli z jakiegoś powodu nie możesz użyć pgrep:
10 * * * * ps ax | grep [m]y_command || /usr/local/bin/my_command
Nawiasy są używane, aby uniknąć dopasowania samej komendy grep.