2013-10-02 12 views
7

node.js sunucumu başlatmak ve durdurmak için bir komut dosyası var. Komut dosyasını durdurduğumda, sonsuza dek süreç öldürülür, ancak düğüm işlemi sonlandırılmaz.Sonsuza kadar süreci öldürmede düğüm işlemini nasıl öldürür

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

nihai senaryo benim için çalışıyor - -

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

Bir yol bulduk. En uygun çözüm değil sanırım ama bu arada çalışıyor. PID düğümünü "ps aux" kullanarak getiriyorum. grep düğümü | grep -v grep | awk '{print $ 2}' 've sonra düğüm işlemini öldür. – Aayush

+8

Neden komut dosyaları yönetmek için sonsuza kadar yerleşik işlevini kullanmıyorsunuz? – robertklep

+0

'killall node''' –

cevap

1

Ben burada
Kill $FOREVER_PID 

script sorunu forver ve düğüm işlemini hem durdurmak için herhangi bir yolu var mı

Evet, senaryonuzu yakalamak ve düğüm işlemini öldürmek için senaryonuzda bir sinyal işleyici kullanın.

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

0
$ killall node 

onları öldürecek.