2013-10-02 9 views
7

Mam skrypt, aby uruchomić i zatrzymać mój serwer node.js. Po zatrzymaniu skryptu proces na zawsze zostanie zabity, ale proces węzła nie zostanie zakończony.Jak przebiega proces węzła Kill podczas zabijania na zawsze Proces

Czy istnieje jakiś sposób, aby zatrzymać zarówno forver i proces węzła kiedy wydawania

Kill $FOREVER_PID 

Oto skrypt -

#!/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 

Ostateczny skrypt działa na mnie -

#!/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

Znaleźliśmy sposób. Nie jest to optymalne rozwiązanie, ale na razie działa. Pobieram węzeł PID za pomocą 'ps aux | grep node | grep -v grep | awk '{print $ 2}' ', a następnie zabij proces węzła. – Aayush

+8

Dlaczego nie używać wbudowanej funkcjonalności forever do zarządzania skryptami? – robertklep

+0

'' 'węzeł killall'''' –

Odpowiedz

1

Tak, istnieje, użyj obsługi sygnału w swoim skrypcie, aby przechwycić sigterm i zabić proces węzła.

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

0
$ killall node 

zabije ich.