pm2启动不工作
pm2 startup doesn't work
我成功设置了我的 nodejs 服务器并在 Ubuntu 15.04 服务器上使用它,我的问题是我希望我的节点应用程序在服务器重新启动时保持 运行 所以我尝试 pm2
、forever
和 crontab
但其中 none 对我有用,重新启动后我需要手动启动节点应用程序。
我试过 pm2
如下:
pm2 startup ubuntu
pm2 start appname
pm2 save
pm2-init.sh 文件:
#!/bin/bash
# chkconfig: 2345 98 02
#
# description: PM2 next gen process manager for Node.js
# processname: pm2
#
### BEGIN INIT INFO
# Provides: pm2
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Should-Start: $network
# Should-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: PM2 init script
# Description: PM2 is the next gen process manager for Node.js
### END INIT INFO
NAME=pm2
PM2=/home/bashar/.nvm/versions/node/v4.1.1/lib/node_modules/pm2/bin/pm2
USER=bashar
export PATH=/home/bashar/.nvm/versions/node/v4.1.1/bin:$PATH
export PM2_HOME="/home/bashar/.pm2"
get_user_shell() {
local shell=$(getent passwd ${1:-`whoami`} | cut -d: -f7 | sed -e 's/[[:space:]]*$//')
if [[ $shell == *"/sbin/nologin" ]] || [[ $shell == "/bin/false" ]] || [[ -z "$shell" ]];
then
shell="/bin/bash"
fi
echo "$shell"
}
super() {
local shell=$(get_user_shell $USER)
su - $USER -s $shell -c "PATH=$PATH; PM2_HOME=$PM2_HOME $*"
}
start() {
echo "Starting $NAME"
export PM2_HOME
super $PM2 resurrect
}
stop() {
super $PM2 dump
super $PM2 delete all
super $PM2 kill
}
restart() {
echo "Restarting $NAME"
stop
start
}
reload() {
echo "Reloading $NAME"
super $PM2 reload all
}
status() {
echo "Status for $NAME:"
super $PM2 list
RETVAL=$?
}
case "" in
start)
start
;;
stop)
stop
;;
status)
status
;;
restart)
restart
;;
reload)
reload
;;
force-reload)
reload
;;
*)
echo "Usage: {start|stop|status|restart|reload|force-reload}"
exit 1
;;
esac
exit $RETVAL
那没有用,所以我尝试使用 crontab
如下:
首先,我创建一个脚本并将其命名为 starter.sh
#!/bin/bash
pm2 start /home/bashar/www/node/server.js
然后打开crontab
编辑器:
crontab -e
@reboot /home/bashar/www/node/server.js
此外,上述方法并没有在服务器重启时启动我的应用程序。
请指教,
pm2 似乎在重新启动期间有错误。将 pm2 添加到 /etc/init.d 中的自动启动进程后,脚本在正常处理下工作正常,但在重新启动时会发生一些奇怪的事情:它将 pm2.dump 文件清空。有几个错误报告 like this one,但到目前为止它仍然是一个错误...
我发现的最简单的 work-around 如下:
- 编辑 /etc/init.d/pm2-init.sh,并注释掉 stop()
部分中的行 "super $PM2 dump"
- 每当你修改你的pm2进程列表时,记得做一个手册"pm2 dump"
如果有人有更永久的解决方案,请告诉我...:)
对于在这里寻找 Windows 机器的任何人(就像我一样),pm2 启动仅适用于 unix 系统。
https://pm2.keymetrics.io/docs/usage/startup/#init-systems-supported
我成功设置了我的 nodejs 服务器并在 Ubuntu 15.04 服务器上使用它,我的问题是我希望我的节点应用程序在服务器重新启动时保持 运行 所以我尝试 pm2
、forever
和 crontab
但其中 none 对我有用,重新启动后我需要手动启动节点应用程序。
我试过 pm2
如下:
pm2 startup ubuntu
pm2 start appname
pm2 save
pm2-init.sh 文件:
#!/bin/bash
# chkconfig: 2345 98 02
#
# description: PM2 next gen process manager for Node.js
# processname: pm2
#
### BEGIN INIT INFO
# Provides: pm2
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Should-Start: $network
# Should-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: PM2 init script
# Description: PM2 is the next gen process manager for Node.js
### END INIT INFO
NAME=pm2
PM2=/home/bashar/.nvm/versions/node/v4.1.1/lib/node_modules/pm2/bin/pm2
USER=bashar
export PATH=/home/bashar/.nvm/versions/node/v4.1.1/bin:$PATH
export PM2_HOME="/home/bashar/.pm2"
get_user_shell() {
local shell=$(getent passwd ${1:-`whoami`} | cut -d: -f7 | sed -e 's/[[:space:]]*$//')
if [[ $shell == *"/sbin/nologin" ]] || [[ $shell == "/bin/false" ]] || [[ -z "$shell" ]];
then
shell="/bin/bash"
fi
echo "$shell"
}
super() {
local shell=$(get_user_shell $USER)
su - $USER -s $shell -c "PATH=$PATH; PM2_HOME=$PM2_HOME $*"
}
start() {
echo "Starting $NAME"
export PM2_HOME
super $PM2 resurrect
}
stop() {
super $PM2 dump
super $PM2 delete all
super $PM2 kill
}
restart() {
echo "Restarting $NAME"
stop
start
}
reload() {
echo "Reloading $NAME"
super $PM2 reload all
}
status() {
echo "Status for $NAME:"
super $PM2 list
RETVAL=$?
}
case "" in
start)
start
;;
stop)
stop
;;
status)
status
;;
restart)
restart
;;
reload)
reload
;;
force-reload)
reload
;;
*)
echo "Usage: {start|stop|status|restart|reload|force-reload}"
exit 1
;;
esac
exit $RETVAL
那没有用,所以我尝试使用 crontab
如下:
首先,我创建一个脚本并将其命名为 starter.sh
#!/bin/bash
pm2 start /home/bashar/www/node/server.js
然后打开crontab
编辑器:
crontab -e
@reboot /home/bashar/www/node/server.js
此外,上述方法并没有在服务器重启时启动我的应用程序。
请指教,
pm2 似乎在重新启动期间有错误。将 pm2 添加到 /etc/init.d 中的自动启动进程后,脚本在正常处理下工作正常,但在重新启动时会发生一些奇怪的事情:它将 pm2.dump 文件清空。有几个错误报告 like this one,但到目前为止它仍然是一个错误...
我发现的最简单的 work-around 如下:
- 编辑 /etc/init.d/pm2-init.sh,并注释掉 stop() 部分中的行 "super $PM2 dump"
- 每当你修改你的pm2进程列表时,记得做一个手册"pm2 dump"
如果有人有更永久的解决方案,请告诉我...:)
对于在这里寻找 Windows 机器的任何人(就像我一样),pm2 启动仅适用于 unix 系统。
https://pm2.keymetrics.io/docs/usage/startup/#init-systems-supported