Configurando o usuário no script Upstart para Node.JS e Forever

0

Eu rodei um site que usa o Node.JS no Ubuntu Server (14.04 LTS). Depois de reinicializar a máquina, meu fluxo de trabalho atual é iniciar manualmente o servidor manualmente executando o comando

$ forever start app.js

Agora estou tentando automatizar esse processo com o Upstart. Eu usei chkconfig no RHEL antes, mas sou novo no Upstart. Eu escrevi o seguinte script e salvei-o em /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

No entanto, o script parece não funcionar. Quando eu executo sudo start myapp ou sudo stop myapp , o console simplesmente trava.

Eu gostaria que o Upstart fosse o mais próximo possível do que aconteceria se eu tivesse feito login no computador após a reinicialização e executasse forever start app.js , incluindo o usuário que está executando o processo, os locais de arquivo de log padrão e assim por diante.

Alguma idéia?

    
por sffc 07.03.2015 / 22:22

1 resposta

2

usando upstart você poderá parar de usar forever para o gerenciamento de processos do nó. O upstart possui mecanismos para garantir que seu processo seja iniciado / interrompido / reiniciado no caso de uma falha (ou quase qualquer outro evento)

aqui está uma versão modificada do seu script upstart que usa a diretiva respawn do upstart para lidar com o reinício do processo se ele falhar:

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

finalmente, para ter certeza de que não há erros de sintaxe no seu conf de serviço, você pode usar init-checkconf /etc/init/myapp.conf .

minha principal fonte de referência para o upstart é aqui . este documento é um pouco pesado, no entanto. e é difícil discernir o uso do mundo real a partir de alguns exemplos.

    
por 17.08.2015 / 14:40