
Entonces ejecutamos este script que agrega datos a un archivo y estoy intentando agregar algo para verificar y ver si el script ya se está ejecutando. Si es así, quiero que haga una pausa y vuelva a verificar en 20 segundos y lo repita hasta que descubra que no se está ejecutando. En ese momento, me gustaría continuar con el resto del guión. Así que necesito saber cómo hacer que siga comprobando hasta que esté bien continuar. ¿Alguien tiene una idea?
if [ `ps -ef| grep $script_name_with_arguments | wc -l ` -gt 1 ]
then
echo "already running"
sleep 20s
else
echo "ok"
fi
}```
Respuesta1
Utiliza algún tipo de bloqueo.
La forma más sencilla es un archivo de bloqueo. Hay algunos paquetes que los gestionarán por usted; No dijiste cuál era tu plataforma o distribución, así que no puedo ser muy preciso al respecto, pero una de ellas es el procmail
paquete que viene con el lockfile
programa.
Lo usarías en tu script de esta manera:
LOCK=/run/npaulsen/mylockfile.lock
lockfile -20 $LOCK
run_the_fscking_rest_of_my_script
rm -f $LOCK
Hay mejoras que puedes hacer para evitar que se bloquee indefinidamente en caso de que una instancia falle. Puedes leer la página de manual sobre eso: man 1 lockfile
. O puede implementar el suyo propio; es trivial pero necesitará un lenguaje de programación real (no un script de shell).
Otra idea más sofisticada (pero también más compleja) sería utilizar semáforos POSIX; intentar man 7 sem_overview
.