Как перейти от init.d к upstart для nginx

У меня есть скрипт init.d для nginx, который обычно работает нормально. Однако после перезагрузки он не работает должным образом, и рабочий процесс умирает, оставляя только основной процесс.

В nginx собраны некоторые компоненты mongodb (nginx-gridfs), и он должен запускаться после mongodb, который запускает upstart.

Это все, что я смог выяснить после устранения неполадок. Я считаю, что я должен изменить nginx на upstart и сделать его зависимым от Монго. Как я могу это сделать?

2
задан 23 November 2012 в 10:37

2 ответа

Поскольку 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

Это решило проблему для меня.

0
ответ дан 23 November 2012 в 10:37

Возможно, вы неправильно настроили его, используя 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

0
ответ дан 23 November 2012 в 10:37

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

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