2014-11-03 98 views
0

我已經使用nodejs運行此Javascript信號服務器。如何讓這個服務器進程永遠運行?

但是每天都會崩潰,導致整個服務停止。如果發生崩潰或未運行,我正在使用以下無限循環重新啓動nodejs腳本。但它並不完美。

任何人都可以優化它,或者有沒有更好的方法來保持a.js啓動並運行,如果突然間進程沒有活着。

#!/bin/bash 
while : 
do 
    # 1 
    videoupload=$(pgrep -f "a.js") 
    if [ $videoupload ]; then 
    log1="running a $1 $2" 
    else 
    log1="re-launch a $1 $2" 
    nohup node /var/tmp/signal/a.js 2>&1 | tee -a /var/tmp/signal.log & 
    fi 

    echo $log1 
    sleep 1 
done 
+0

爲什麼/在哪裏/如何首先崩潰? – mscdex 2014-11-03 01:55:49

+0

它與一些無效的變量未分配崩潰(一些代碼錯誤,因爲服務器腳本很大,我們想臨時讓它自動重啓) – YumYumYum 2014-11-03 09:48:04

回答

2

如果您正在使用新的CentOS 6,一個更好的方法來處理,這是把它放在一個暴發戶腳本。 Upstart監視所有系統守護進程並確保它們保持運行。當系統啓動時,下面的Upstart配置也會啓動你的進程。

編輯文件/etc/init/a.conf並在其中放入以下配置。你需要sudo以root身份編輯。

description "a.js" 
author "YumYumYum" 


# Stanzas 
# 
# Stanzas control when and how a process is started and stopped 
# See a list of stanzas here: http://upstart.ubuntu.com/wiki/Stanzas#respawn 

# When to start the service 
start on runlevel [2345] 

# When to stop the service 
stop on runlevel [016] 

# Automatically restart process if crashed 
respawn 


script 
    echo $$ > /var/run/a.pid; 
    exec node /var/tmp/signal/a.js 
end script 


post-stop script 
    rm -f /var/run/a.pid 
end script 

現在你已經創建了你的過程是一個暴發戶的配置,你可以在命令行中啓動它:

$ sudo service a start 

新貴將監視您的程序,並將重新啓動它的股價下跌的任何時間。它還將日誌重定向到/var/log/upstart/a.log

相關問題