Ich suche nach einer einfachen und generischen Lösung, mit der Sie jedes Skript oder jede Anwendung in crontab ausführen und verhindern können, dass es zweimal ausgeführt wird.
Die Lösung sollte unabhängig vom ausgeführten Befehl sein.
Ich gehe davon aus, dass es so aussehen sollte, als ob die lock && (command ; unlock)
Sperre false zurückgeben würde, wenn es eine andere Sperre gäbe.
Der zweite Teil würde so aussehen, als hätte er den Befehl lock, run und unlock erhalten, nachdem der Befehl ausgeführt wurde, auch wenn er einen Fehler zurückgibt.
echo "Locking succeeded" >&2; trap 'rm -rf /var/lock/mylock' EXIT
Keine Notwendigkeit, ein ausgefallenes Paket zu installieren:
Es ist schneller, dieses Skript selbst zu schreiben, als "apt-get install" auszuführen, nicht wahr? Möglicherweise möchten Sie dem pgrep "-u $ (id -u)" hinzufügen, um nach Instanzen zu suchen, die nur vom aktuellen Benutzer ausgeführt werden.
quelle
||
Operators übergeben werden, bevor einer die Möglichkeit hat, das Skript noch zu starten.Siehe auch Tim Kays
solo
, der das Sperren durch Binden eines Ports an eine für den Benutzer eindeutige Loopback-Adresse durchführt:http://timkay.com/solo/
Falls seine Seite ausfällt:
Verwendung:
Benutze es so:
Skript:
quelle
solo(3801): Can't assign requested address
sei denn, Sie erzwingen einen Fehler0
für den 3. Parameter der Methodepack
. Was für das BSD gut ist, ist auch für den Mac gut.Du brauchst ein Schloss.
run-one
erledigt den Job, aber Sie möchten vielleicht auchflock
aus demutil-linux
Paket schauen .Es ist ein Standardpaket, das von den Kernel-Entwicklern bereitgestellt wird, mehr Anpassungsmöglichkeiten
run-one
bietet als und immer noch sehr einfach ist.quelle
Eine einfache Lösung von bash-hackers.org , die für mich funktionierte, war mkdir . Auf diese Weise können Sie auf einfache Weise sicherstellen, dass nur eine Instanz Ihres Programms ausgeführt wird. Erstellen Sie mit mkdir .lock ein Verzeichnis, das zurückgegeben wird
Diese einfache Funktion hat also die gesamte Dateisperrlogik ausgeführt:
quelle
Diese Lösung ist für ein Bash-Skript gedacht, das sich selbst überprüfen muss
quelle