Está en: » Notas y recortes »

Comprobar si un script en bash ya se está ejecutando

Comprobar si un script en bash ya se está ejecutando

bash

Algo realmente útil para cuando necesitamos que sólo haya una ejecución del mismo script (por ejemplo, para copias de seguridad automáticas ejecutadas desde cron).

Lógicamente, se incluye al principio del script.

if pidof -x $(basename $0) > /dev/null; then
  for p in $(pidof -x $(basename $0)); do
    if [ $p -ne $ ]; then
      echo "El script $0 ya se está ejecutando. Saliendo..."
      exit
    fi
  done
fi

Comentarios

  1. Raffa182 dice:

    Consulta si yo tengo un script que se llama backup.sh por ej deberia poner

    if pidof -x $(basename $0) > /dev/null; then
    for p in $(pidof -x $(basename backup.sh)); do
    if [ $p -ne $$ ]; then
    echo «El script backup.sh ya se está ejecutando. Saliendo…»
    exit
    fi
    done
    fi

    Saludos…

    • No hace falta que hagas las sustituciones con el nombre del script.
      Por defecto bash, cuando llamas a un script, la variable $0 toma el nombre del mismo, así que puedes poner el código tal y como está en el post (y así te sirve para reutilizarlo fácilmente en otros).
      Haz pruebas verás como funciona tal cual.
      Saludos

  2. Raffa182 dice:

    Miguel gracias pude utilizar el codigo es mas lo tengo para un server de balanceo de carga corriendo y funciona genial, me sirve a la hora de tirar script de backup para no saturar.

    🙂

    Saludos

  3. carlos dice:

    Yo tengo un script python y estaba buscando esto para q no se sature, porq la intensión es mandar a ejecutar cada 2 min en el cron para q siempre este funcionando este código debo colocar en la cabecera de mi escript python tengo esa duda y gracias por el aporte

  4. Martin dice:

    Excelente. Me sirvió perfecto. Muchas gracias por compartir.

  5. Rafael dice:

    Gracias por tu post, una pregunta, en donde puedo ver el mensaje que esta en el script que comentaste (echo «El script $0 ya se está ejecutando. Saliendo…»)???

    Saludos

    • Lo muestra en la salida standard (stdout).
      Normalmente lo muestra directamente en pantalla a no ser que estés redirigiendo dicha salida a otro lugar.

      • marco salazar dice:

        Se puede enviar el aviso vía correo electrónico personal, para que me avise en este caso que el backup ah sido realizado satisfactoriamente?

        • Hola Marco,

          Eso es algo que tendrás que tratar con el software que uses para hacer backups.
          Este script sólo comprueba si ya se está ejecutando algo (normalmente para evitar que se ejecute por duplicado).

  6. Dennis dice:

    el script es muy bueno, pero si tengo varios scripts y cuando ejecute uno, No se ejecute el otro cualquiera que sea?, como seria..

    ejemplo tengo 5 scripts

    cuando ejecute el script1 No se ejecute los demás scripts.

    Gracias

Deje su comentario

Previsualización de comentario
  1. Anónimo dice:





Pings para esta entrada