El script de inicio se puede ejecutar varias veces a pesar del archivo pid

El script de inicio se puede ejecutar varias veces a pesar del archivo pid

La razón por la que estoy haciendo este script es porque quiero demonizar al supervisor: en este momento estoy en un host en la nube en el que no tengo acceso al comando /etco sudo; Este script es mi mejor intento de hacer todo desde mi archivo /home. Tengo este script bash con el start-stop-daemoncomando pero me permite ejecutarlo varias veces y me gustaría que se ejecute solo una vez. Hasta ahora esto es lo que obtuve:

#! /bin/bash 
SUPERVISORD=/usr/local/bin/supervisord
PIDFILE=/home/user/supervisor/supervisord.pid
OPTS="-c /home/user/supervisor/supervisord.conf -j $PIDFILE"

test -x $SUPERVISORD || exit 0

. /lib/lsb/init-functions

export PATH="${PATH:+$PATH:}/usr/local/bin:/usr/sbin:/sbin"

case "$1" in
start)
    log_begin_msg "Starting Supervisor daemon manager..."
    start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $SUPERVISORD -- $OPTS || log_end_msg 1
    log_end_msg 0
    ;;

stop)
    log_begin_msg "Stopping Supervisor daemon manager..."
    start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE || log_end_msg 1
    log_end_msg 0
    ;;

restart|reload|force-reload)
    log_begin_msg "Restarting Supervisor daemon manager..."
    start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile $PIDFILE
    start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $SUPERVISORD -- $OPTS || log_end_msg 1
    log_end_msg 0
    ;;

*)
    log_success_msg "Usage: {start|stop|reload|force-reload|restart}"
    exit 1
    ;;
esac

exit 0

Supongo que cuando se crea el archivo pid, se sobrescribe el anterior, por lo que realizar varias paradas tampoco funciona. ¿Cómo puedo hacer que este script se ejecute solo una vez y no ejecutar múltiples procesos si "inicio el script" 5 veces? Debería quejarse diciendo que el proceso ya está en marcha.

Respuesta1

Descubrí cuál era el problema, mi secuencia de comandos no verificaba si el proceso ya se estaba ejecutando, por lo que simplemente inició tantos procesos como usted lo ejecutaba, pero agregó:

    if [ -f $PIDFILE ]; then
      echo "supervisord already running: $PIDFILE" 
      exit 1 
    fi

en el start)caso solucionado mi problema, esto verifica si supervisord ha generado su respectivo archivo .pid y si existe no hace nada.

información relacionada