Estoy buscando una solución simple y genérica que le permita ejecutar cualquier script o aplicación en crontab y evitar que se ejecute dos veces.
La solución debe ser independiente del comando ejecutado.
Supongo que debería verse como lock && (command ; unlock)
donde el bloqueo devolverá falso si hubiera otro bloqueo.
La segunda parte sería como si adquiriera el bloqueo, ejecute el comando y desbloquee después de ejecutar el comando, incluso si devuelve un error.
echo "Locking succeeded" >&2; trap 'rm -rf /var/lock/mylock' EXIT
No es necesario instalar un paquete elegante:
Es más rápido escribir ese script usted mismo que ejecutar "apt-get install", ¿no es así? Es posible que desee agregar "-u $ (id -u)" al pgrep para verificar las instancias ejecutadas solo por el usuario actual.
fuente
||
operador al mismo tiempo, antes de que cualquiera tenga la oportunidad de iniciar el script todavía.Consulte también Tim Kay's
solo
, que realiza el bloqueo al vincular un puerto en una dirección de bucle de retorno único para el usuario:http://timkay.com/solo/
En caso de que su sitio se caiga:
Uso:
Úselo así:
Guión:
fuente
solo(3801): Can't assign requested address
menos que fuerce un0
para el 3er parámetro del métodopack
. Lo que es bueno para el BSD también es bueno para la Mac.Necesitas un candado.
run-one
hace el trabajo, pero también puede que desee ver enflock
deutil-linux
paquete.Es un paquete estándar proporcionado por los desarrolladores del kernel, permite una mayor personalización
run-one
y aún es muy simple.fuente
Una solución simple de bash-hackers.org que funcionó para mí fue usar mkdir . Esta es una manera fácil de asegurarse de que solo se esté ejecutando una instancia de su programa. Cree un directorio con mkdir .lock que devuelva
Entonces, esta función simple hizo toda la lógica de bloqueo de archivos:
fuente
Esta solución es para un script bash que necesita verificarse
fuente