2013-10-02 166 views
7

我有一個腳本來啓動和停止我的node.js服務器。 當我停止腳本時,永久進程被終止,但節點進程沒有終止。如何殺死節點進程永久終止進程

有沒有什麼辦法阻止這兩個forver和節點的過程,當我發出

Kill $FOREVER_PID 

這裏是腳本 -

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

最終的腳本爲我工作 -

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

找到了一個方法。不是最佳的解決方案,我猜想它同時適用。我正在使用'ps aux |獲取節點PID grep節點| grep -v grep | awk'{print $ 2}'',然後終止節點進程。 – Aayush

+8

爲什麼不使用永遠的內置功能來管理腳本? – robertklep

+0

'''killall node''' –

回答

1

是的,請在腳本中使用信號處理程序來捕獲sigterm並終止節點進程。

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

0
$ killall node 

會殺了他們。