następujący mechanizm blokujący jest stosowany do zapobiegania cron
pracy uruchamianiu równocześnie:atakujących trzody wyjścia Jeżeli nie można uzyskać zabezpieczenie
#!/bin/bash
echo "Before critical section"
(
flock -e 200
echo "In critical section"
sleep 5
) 200>/tmp/blah.lockfile
echo "After critical section"
Po uruchomieniu dwóch wystąpień razem późniejsze czeka aż kończy się pierwsza i następnie biegnie. Może to spowodować zaległości skryptów oczekujących na uruchomienie.
Jak zmienić ten skrypt, aby flock
nie mógł uzyskać blokady, to kończy skrypt? Próbowałem bez powodzenia -n
.
Byłoby miło udokumentować przypadki, kiedy może się to nie udać. Podejrzewam, że to się nie powiedzie, jeśli '0 0' zawiera spacje, i zawiedzie, jeśli' $ 0' nie zawiera ścieżki do uruchomionego skryptu (np. Skrypt jest gdzie indziej, ale na 'PATH'). – joeytwiddle
$ 0 powinien nadal mieć ścieżkę, jeśli jest w $ PATH. Jeden przypadek, w którym nie działa, jest pod kreską. – steveayre