Je recherche une solution simple et générique qui vous permettrait d'exécuter n'importe quel script ou application dans crontab et de l'empêcher de s'exécuter deux fois.
La solution doit être indépendante de la commande exécutée.
Je suppose que cela devrait ressembler à l' lock && (command ; unlock)
endroit où le verrou retournera faux s'il y avait un autre verrou.
La deuxième partie serait comme si elle avait acquis le verrou, exécuté la commande et déverrouillé après l'exécution de la commande, même si elle renvoie une erreur.
echo "Locking succeeded" >&2; trap 'rm -rf /var/lock/mylock' EXIT
Pas besoin d'installer un paquet fantaisie:
Il est plus rapide d'écrire ce script vous-même que d'exécuter "apt-get install", n'est-ce pas? Vous voudrez peut-être ajouter "-u $ (id -u)" au pgrep pour vérifier uniquement les instances exécutées par l'utilisateur actuel.
la source
||
opérateur en même temps, avant que l'un ou l'autre n'ait encore la possibilité de démarrer le script.Voir aussi Tim Kay's
solo
, qui effectue le verrouillage en liant un port à une adresse de bouclage unique à l'utilisateur:http://timkay.com/solo/
Au cas où son site tombe en panne:
Usage:
Utilisez-le comme ceci:
Scénario:
la source
solo(3801): Can't assign requested address
sauf si vous forcez un0
pour le 3e paramètre de méthodepack
. Ce qui est bon pour le BSD l'est aussi pour le Mac.Vous avez besoin d'un verrou.
run-one
fait le travail, mais vous voudrez peut-être également examiner àflock
partir duutil-linux
package.Il s'agit d'un package standard fourni par les développeurs du noyau, qui permet plus de personnalisation
run-one
et est toujours très simple.la source
Une solution simple de bash-hackers.org qui fonctionnait pour moi était d'utiliser mkdir . C'est un moyen simple de s'assurer qu'une seule instance de votre programme est en cours d'exécution. Créez un répertoire avec mkdir .lock qui renvoie
Donc, cette fonction simple a fait toute la logique de verrouillage de fichier:
la source
Cette solution est pour un script bash qui doit se vérifier
la source