Скрипт запуска может быть запущен многократно несмотря на изодромный с предварением файл

Причина я делаю этот сценарий, состоит в том, потому что я хочу к daemonize supervisord: прямо сейчас я нахожусь в облачном хосте, в котором у меня нет доступа к /etc или sudo команда; этот сценарий является моей лучшей попыткой сделать все от моего /home. У меня есть этот сценарий удара с start-stop-daemon команда, но это позволяет мне выполнять его многократно, и я хотел бы, чтобы это просто работало только однажды. До сих пор вот то, что я получил:

#! /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

Я принимаю, когда изодромный с предварением файл создается, он перезаписывает предыдущий, так выполнение нескольких остановок не работает также. Как я могу сделать этот сценарий просто выполненным однажды и не выполнить несколько процессов, если я действительно "пишу сценарий, запускаются" 5 раз? Это должно жаловаться, говоря, что процесс уже работает.

1
задан 27 September 2014 в 21:15

1 ответ

Я узнаю то, что было проблемой, мой сценарий не проверял, работал ли процесс уже так, это только что запустилось, столько обрабатывает, сколько Вы выполняете его, но добавление:

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

в start) случай решил мою проблему, это проверяет, генерировал ли supervisord свой соответствующий .pid файл и если это существует, это ничего не делает.

0
ответ дан 7 October 2019 в 11:28

Другие вопросы по тегам:

Похожие вопросы: