2013-10-02 3 views
7

У меня есть скрипт для запуска и остановки моего узла. Когда я останавливаю скрипт, процесс навсегда уничтожается, но процесс узла не завершается.Как убить процесс узла при убийстве навсегда процесс

Есть ли способ, чтобы остановить как 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

Обнаружен способ. Не оптимальное решение, я думаю, но оно работает пока. Я извлекаю PID узла, используя 'ps aux | grep-узел | grep -v grep | awk '{print $ 2}' ', а затем уничтожить процесс узла. – Aayush

+8

Почему бы не использовать встроенные функции forever для управления сценариями? – robertklep

+0

'' killall node''' –

ответ

1

Да, есть использование обработчика сигнала в вашем скрипте, чтобы поймать сигстерм и убить процесс узла.

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

0
$ killall node 

будет убивать их.

Смежные вопросы