Причина я делаю этот сценарий, состоит в том, потому что я хочу к 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 раз? Это должно жаловаться, говоря, что процесс уже работает.
Я узнаю то, что было проблемой, мой сценарий не проверял, работал ли процесс уже так, это только что запустилось, столько обрабатывает, сколько Вы выполняете его, но добавление:
if [ -f $PIDFILE ]; then
echo "supervisord already running: $PIDFILE"
exit 1
fi
в start)
случай решил мою проблему, это проверяет, генерировал ли supervisord свой соответствующий .pid файл и если это существует, это ничего не делает.