У меня есть скрипт init.d для nginx, который обычно работает нормально. Однако после перезагрузки он не работает должным образом, и рабочий процесс умирает, оставляя только основной процесс.
В nginx собраны некоторые компоненты mongodb (nginx-gridfs), и он должен запускаться после mongodb, который запускает upstart.
Это все, что я смог выяснить после устранения неполадок. Я считаю, что я должен изменить nginx на upstart и сделать его зависимым от Монго. Как я могу это сделать?
Поскольку nginx-gridfs подключается к mongodb, сервер БД уже должен быть запущен и готов. Это было причиной проблемы. Сначала я удалил скрипт /etc/init.d/nginx с помощью команды «update-rc.d remove nginx». Затем я создал скрипт «upstart» в /etc/init/nginx.conf:
# nginx
description "nginx http daemon"
#start on mongodb
start on (local-filesystems
and net-device-up IFACE=lo
and started mongodb)
stop on stopped mongodb
env DAEMON=/usr/local/nginx/sbin/nginx
env PID=/usr/local/nginx/logs/nginx.pid
expect fork
respawn
respawn limit 10 5
pre-start script
$DAEMON -t
if [ $? -ne 0 ]
then exit $?
fi
# Add a sleep of 10 sec. to allow mongodb to finish starting up
sleep 10
end script
exec $DAEMON
Это решило проблему для меня.
Возможно, вы неправильно настроили его, используя update-rc.d <yourscript> start [startorder] 2 3 4 5 . stop [end order] 0 1 6 .
для создания ссылок уровня запуска.
Если ваш скрипт выполнен правильно, он принимает команды start
и stop
, проверьте, что все зависимости запускаются до вашего скрипта, обычно 40 безопасен для startorder , и что все службы, которые зависят конца вашего скрипта перед ним, вероятно, достаточно 20 для endorder .
Чтобы лучше узнать, как сделать хороший сценарий, взгляните на те, что в вашем /etc/init.d