[英]BASH Script to start a node.js socket server as a service
基本上,我想完成的是某種腳本或方法,以供我啟動作為服務的node.js套接字服務器腳本。
這是為了使我不必在SSH中實際運行“ node server.js”,而不必坐在那里將其打開。
任何幫助,將不勝感激。
謝謝斯科特
我認為除了forever
使用以外的其他東西都不犯罪。 在我的項目中,我還避免使用這種工具,而更多地依賴於系統功能。 由於我也嘗試避免以root用戶身份運行應用程序,因此無法使用SystemV或Upstart。
這就是強大的shell scripting
! 我創建了一些僅執行簡單任務的bash
腳本,例如具有啟動,停止,重新啟動和查詢狀態功能的process watchdog
。
檢查此代碼。 隨意修改它。 要使用它-將命令放在COMMAND參數中。 並執行./path_to_script.sh -start
。 這將創建看門狗進程,該進程將啟動您的節點進程並監視其是否死亡,如果是,則將其重啟。 這遠非理想,因此,如果有人需要修復,在此處添加,刪除內容,請在下面發表評論。
#!/bin/bash
CURRENT_PATH=$(pwd)
LOGFOLDER=$CURRENT_PATH"/logs/"
PIDFOLDER=$CURRENT_PATH"/pid/"
#PID file where the this script process ID is stored
WATCHDOGPIDFILE=$PIDFOLDER"watchdog-admin.pid"
#PID file where the node process ID is stored
NODEPIDFILE=$PIDFOLDER"node-admin.pid"
#Watchdog process error log file
WATCHDOGLOGFILE=$LOGFOLDER"admin-watchdog-error.log"
#Node process error log file
NODELOGFILE=$LOGFOLDER"admin-error.log"
#Command to be executed on daemon start
COMMAND="node ./admin/app.js 1> /dev/null 2>> $NODELOGFILE"
ARG_1=$1
start() {
if [ -e $NODEPIDFILE ]; then
PID=$(cat $NODEPIDFILE)
if [ $(ps -o pid | grep $PID) ]; then
return;
else
touch $NODEPIDFILE
nohup $COMMAND &
echo $! > $NODEPIDFILE
fi
else
touch $NODEPIDFILE
nohup $COMMAND &
echo $! > $NODEPIDFILE
fi
}
stop() {
if [ -e $NODEPIDFILE ]; then
PID=$(cat $NODEPIDFILE)
if [ $(ps -o pid | grep $PID) ]; then
kill -9 $PID
fi
rm $NODEPIDFILE
fi
}
stopdaemon() {
stop
rm $WATCHDOGPIDFILE
exit 0
}
log() {
echo $1 >> $WATCHDOGLOGFILE
}
keep_alive() {
if [ -e $NODEPIDFILE ]; then
PID=$(cat $NODEPIDFILE)
if [ $(ps -o pid | grep $PID) ]; then
return;
else
log "Jim, he is dead!! Trying ressurection spell..."
start
fi
else
start
fi
}
case x${ARG_1} in
x-start )
echo "Starting daemon watchdog"
nohup "$0" -daemon &> /dev/null &
;;
x-daemon )
if [ -e $WATCHDOGPIDFILE ]; then
PID=$(cat $WATCHDOGPIDFILE)
if [ $(ps -o pid | grep $PID) ]; then
exit 0;
fi
fi
touch $WATCHDOGPIDFILE
echo $$ > $WATCHDOGPIDFILE
#trap the interruption or kill signal
trap stopdaemon INT SIGINT TERM SIGTERM
start
while true; do
keep_alive
wait
sleep 1
done
;;
x-stop )
echo "Stopping daemon watchdog"
PID=$(cat $WATCHDOGPIDFILE)
kill $PID
;;
x-status )
#check if process is running and PID file exists, and report it back
;;
x )
echo "Usage {start|stop|status}"
esac
exit 0
這變得很快。 您真正要問的是如何“守護”進程。 不僅僅是在后台運行它。 理想情況下,您希望以一種不會捆綁可移動文件系統的方式運行它,並且希望保持其日志輸出並且不讓它隨地吐痰到您的舊終端。 您不希望外殼退出時被意外殺死等等。
如果您使用的是基於Debian的系統(如Ubuntu),則/sbin/start-stop-daemon
您的大部分需求。 有人提到為此編寫一個Ubuntu Upstart配置,這也是一個選擇。 在其他發行版(如Fedora)上,systemd提供了通常被視為此自動守護程序服務的“鍍金”版本。 它基本上可以守護和管理任何非顯式交互的程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.