Я запускаю веб-сайт, который использует Node.JS на сервере Ubuntu (14,04 LTS). После перезагрузки компьютера мой текущий рабочий процесс состоит в том, чтобы вручную запустить сервер вручную, выполнив команду

$ forever start app.js

Сейчас я пытаюсь автоматизировать этот процесс с помощью Upstart. Я использовал chkconfig на RHEL раньше, но я новичок в Upstart. Я написал следующий скрипт и сохранил его в /etc/init/myapp.conf.

#!upstart                                                          
description "Start the node process with Upstart"         

start on startup                                                   
stop on shutdown                                                   
expect fork                                                        

env APP_DIR="/path/to/app"                         
env NODE_BIN="/usr/local/bin"                                      
env HOME_DIR="/home/admin"                                     

script                                                             
    date                                                           
    echo "Starting"                                             
    su admin                                                   
    cd $APP_DIR                                                    
    PATH=$NODE_BIN:$PATH                                           
    HOME=$HOME_DIR                                                 
    echo "Running forever start"                                   
    forever start app.js                                      
end script                                                         

pre-stop script                                                    
    date                                                           
    echo "Stopping"                                             
    su admin                                                   
    cd $APP_DIR                                                    
    PATH=$NODE_BIN:$PATH                                           
    HOME=$HOME_DIR                                                 
    echo "Running forever stop"                                    
    forever stop app.js                                       
end script

Тем не менее, сценарий, похоже, не работает. Когда я запускаю sudo start myapp или sudo stop myapp , консоль просто зависает.

Я бы хотел, чтобы Upstart как можно точнее эмулировал то, что произойдет, если я просто войду на компьютер после перезагрузки и forever start app.js , включая пользователя, выполняющего процесс, расположения файлов журнала по умолчанию и так далее.

Есть идеи?

1 ответ1

2

с помощью upstart вы сможете прекратить использовать forever для управления процессами вашего узла. upstart имеет механизмы, обеспечивающие запуск / остановку / перезапуск вашего процесса в случае сбоя (или почти любого другого события в этом отношении)

Вот модифицированная версия вашего сценария upstart, которая использует директиву respawn upstart для обработки перезапуска вашего процесса в случае сбоя:

description "Start the node process with Upstart"         
author "you"

# use if your process is going to fork *once*
# expect fork

# use if your process is going to fork *twice*
# exepect daemon

# respawn the process indefinitely
# (ie. disregard the number of times it crashed
# during a given interval and continuously 
# restart the process)
respawn
respawn limit unlimited

setuid admin

# ensures the process is only started once we have
# filesystem access and an ethernet interface other
# than loopback is available (ie. internet conn)
# if your node process doesn't require net connectivity
# just remove the `and net-device-up...`
start on (local-filesystem and net-device-up IFACE!=lo)
stop on shutdown

# chdir sets the directory for all script blocks 
# (pre/post/errethang)
chdir "/path/to/your/app"

script
    # we're already in /path/to/your/app cause of `chdir`                                       
    echo "app is starting"
    /usr/local/bin/node app.js 2>&1 > app.log
end script

pre-stop script
    echo "app is about to stop"
end script

наконец, чтобы убедиться, что в вашей службе conf нет синтаксических ошибок, вы можете использовать init-checkconf /etc/init/myapp.conf .

мой основной источник информации для выскочки здесь. хотя этот документ немного тяжеловесный и по некоторым примерам трудно различить использование в реальном мире.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .