2013-10-02 11 views
7

Ho uno script per avviare e arrestare il mio server node.js. Quando interrompo lo script, il processo per sempre viene eliminato, tuttavia il processo del nodo non viene terminato.Come processo nodo Kill su uccisione per sempre processo

Esiste un modo per fermare sia forver e di processo del nodo quando emetto

Kill $FOREVER_PID 

Ecco lo script -

#!/bin/bash 
path="/Users/aayush/Desktop/node/rest-api" 
action="forever errorLog_express.js " 

logFile="$path/system.log" 
pidFile="$path/pidFile.pid" 

#messages 
usage="Usage : node-script.sh start|stop" 
panic="Panic! nothing to do, exiting" 
unknown="Unrecognized parameter" 
start="[starting node-forever]" 
end="[stopping node-forever]" 
notRunning="Process node-forever not running" 
alreadyRunning="Process node-forever already running" 

if [ -z $1 ] 
then 
    echo $panic 
    echo $usage 
    exit 0; 
fi 

if [ $1 = "start" ] 
then 
    # starting process 
    dummy="OK" 
    if [ -f $pidFile ]; 
    then 
     exit 0 
    else 
     cd $path 
     echo "cd $path" 
     echo $start 
     echo $start >> $logFile 
     $action > /dev/null 2>&1 & 
     Process_Pid=$! 
     echo $Process_Pid > $pidFile 
     echo $dummy 
     exit 0 
    fi 
elif [ $1 = "stop" ] 
then 
    # stopping process by getting pid from pid file 
    dummy="OK" 
    echo $end 
    echo $end >> $logFile 
    if [ -f $pidFile ]; 
    then 
     while IFS=: read -r pid 
     do 
      # reading line in variable pid 
      if [ -z $pid ] 
      then 
       dummy="FAILED" 
       echo "Could not parse pid PANIC ! do 'ps' and check manully" 
      else 
       echo "Process Pid : $pid" 
       kill $pid 
      fi 
     done <"$pidFile" 
     rm $pidFile 
     echo $dummy 
     exit 0 
    else 
     echo $notRunning 
     echo "FAILED" 
     exit 0 
    fi 
else 
    echo $unknown 
    echo $usage 
    exit 0 
fi 

Lo script finale che lavora per me -

#!/bin/bash 
#proccessname: node 

USER=node 
PWD=node 
node=node 
forever=forever 
path="/Users/aayush/Desktop/node/rest-api" 
action="forever start -l forever.log -a -o out.log -e err.log errorLog_express.js " 

start(){ 
cd $path 
$action 
    } 

stop(){ 
    /usr/local/bin/forever stopall 
} 

restart(){ 
stop 
start 
} 

status(){ 
/usr/local/bin/forever list 
} 

#Options 

case "$1" in 
    start) 
    start 
    ;; 
    stop) 
    stop 
    ;; 
    restart) 
    stop 
    start 
    ;; 
    status) 
    status 
    ;; 
    *) 
    echo $ "usage $0 {start | stop | status | restart}" 

    exit 1 
esac 
exit 0 
+0

Trovato un modo. Non è la soluzione ottimale, immagino, ma nel frattempo funziona. Sto recuperando il nodo PID usando 'ps aux | nodo grep | grep -v grep | awk '{print $ 2}' 'e quindi uccide il processo del nodo. – Aayush

+8

Perché non utilizzare la funzionalità integrata di forever per gestire gli script? – robertklep

+0

'' 'killall node''' –

risposta

1

Sì, utilizzare un gestore di segnale nello script per catturare il sigterm e terminare il processo del nodo.

www.gnu.org/software/bash/manual/html_node/Signals.html

0
$ killall node 

li ucciderà.

Problemi correlati