我永远配置为在启动时运行我的node.js服务器。使用这个scipt。它工作正常。并永远保持服务器运行。但是,当我永远运行列表时,我在这里看不到我的服务器!我知道它正在运行,但它从未在此列表中。看起来系统正在运行两个永远的实例。
root@ddd [/etc/init.d]# chkconfig --list |grep node1
node1 0:off 1:off 2:on 3:on 4:on 5:on 6:off
这是脚本:/etc/init.d/node1
NAME=node1
NODE_BIN_DIR=/usr/local/bin
NODE_PATH=/usr/local/lib/node_modules
APPLICATION_DIRECTORY=/home/user1/www
APPLICATION_START=node1.js
PIDFILE=/var/run/node1.pid
LOGFILE=/var/log/node1.log
PATH=$NODE_BIN_DIR:$PATH
export NODE_PATH=$NODE_PATH
start() {
echo "Starting $NAME"
forever --pidFile $PIDFILE --sourceDir $APPLICATION_DIRECTORY \
-a -l $LOGFILE --minUptime 5000 --spinSleepTime 2000 \
start $APPLICATION_START &
RETVAL=$?
}
stop() {
if [ -f $PIDFILE ]; then
echo "Shutting down $NAME"
forever stop $APPLICATION_START
rm -f $PIDFILE
RETVAL=$?
else
echo "$NAME is not running."
RETVAL=0
fi
}
restart() {
echo "Restarting $NAME"
stop
start
}
status() {
echo "Status for $NAME:"
forever list
RETVAL=$?
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status
;;
restart)
restart
;;
*)
echo "Usage: {start|stop|status|restart}"
exit 1
;;
esac
exit $RETVAL
答案 0 :(得分:2)
您也可以使用@reboot参数永久地放在用户的crontab中,这样它就会在启动时启动。
类似的东西:
@reboot /usr/bin/forever start /path/to/script.js
(这假设永远在/usr/bin/
;它也可能在某个地方/usr/local/bin/
。)
答案 1 :(得分:1)
我不会浪费时间去试图永远守护。
pm2是新王!永远死了,相信我
以下是如何将pm2作为systemd或OS等效服务运行:
npm install -g pm2
pm2 startup
现在你可以这样做:
service pm2 status|start|stop|restart
也:
pm2 save
将拍摄正在运行的pm2应用程序的快照,并在重新启动时重新启动它们(不需要crontab条目)
完成!
pm2比永远好多了。它与永远完全相同,但更多!
pm2 list # equivalent to forever list
pm2 start app.js --name "wotever" # equivalent to forever start
pm2 start app.js -i 0 --name "wotever" # load balance your app on all available cores
你看到最后一个命令吗?你明白这意味着什么吗?我很敬畏!
通常,您的应用在一个核心上运行。不再!我们正在谈论速度!
PM2 FOREVER!
答案 2 :(得分:0)
问题是永远将所有文件保存在〜/ .forever中。以上脚本以root身份运行。不知道它在哪里存储它们,但对我来说" sudo永远列出"做到了。
答案 3 :(得分:0)
只需使用start
命令即可
forever start /path/to/script.js
答案 4 :(得分:0)
我喜欢使用forever-service
来守护node.js进程,它将通过在引导和日志文件重定向上启动它们来处理所有事情。
请参见this guide