Szukam prostego i ogólnego rozwiązania, które umożliwiłoby wykonanie dowolnego skryptu lub aplikacji w crontab i zapobiegnięcie dwukrotnemu uruchomieniu.
Rozwiązanie powinno być niezależne od wykonanego polecenia.
Zakładam, że powinno to wyglądać tak, lock && (command ; unlock)
gdzie zamek zwróci wartość false, jeśli był inny zamek.
Druga część byłaby taka, jakby uzyskała blokadę, uruchom polecenie i odblokuj po wykonaniu polecenia, nawet jeśli zwróci błąd.
echo "Locking succeeded" >&2; trap 'rm -rf /var/lock/mylock' EXIT
Nie musisz instalować jakiegoś fantazyjnego pakietu:
Szybciej jest napisać ten skrypt sam, niż uruchomić „apt-get install”, prawda? Możesz dodać „-u $ (id -u)” do pgrep, aby sprawdzić wystąpienia uruchomione tylko przez bieżącego użytkownika.
źródło
||
operatora, zanim którykolwiek z nich będzie miał jeszcze możliwość uruchomienia skryptu.Zobacz także Tim Kay
solo
, który wykonuje blokowanie, wiążąc port na adres pętli zwrotnej unikalny dla użytkownika:http://timkay.com/solo/
W przypadku awarii jego strony:
Stosowanie:
Użyj tego w ten sposób:
Scenariusz:
źródło
solo(3801): Can't assign requested address
nie powiedzie się, chyba że wymusisz a0
dla trzeciego parametru metodypack
. To, co jest dobre dla BSD, jest również dobre dla komputerów Mac.Potrzebujesz blokady.
run-one
wykonuje zadanie, ale możesz również zajrzeć do niegoflock
zutil-linux
paczki.Jest to standardowy pakiet dostarczany przez programistów jądra, pozwala na większą personalizację niż
run-one
i jest nadal bardzo prosty.źródło
Prostym rozwiązaniem z bash-hackers.org, które działało dla mnie, było użycie mkdir . Jest to prosty sposób, aby upewnić się, że działa tylko jedna instancja programu. Utwórz katalog z mkdir .lock, który zwraca
Więc ta prosta funkcja zrobiła całą logikę blokowania plików:
źródło
To rozwiązanie dotyczy skryptu bash, który musi się sprawdzić
źródło