直接在 docker 的 container 中运行 PM2 可能会遇到以下问题:1
PM2 dameon PID = 1
0 with /.pm2/pm2.log file not found
这是因为 /.pm2
目录不存在造成的。可能很多人此时会想到去创建该目录,事实上是不必要的,比较好的做法是使用官方提供的 dump
命令。
运行 PM2 的 Dockerfile ,可以参考:
1 | FROM node:0.11.13 |
搞定。
直接在 docker 的 container 中运行 PM2 可能会遇到以下问题:1
PM2 dameon PID = 1
0 with /.pm2/pm2.log file not found
这是因为 /.pm2
目录不存在造成的。可能很多人此时会想到去创建该目录,事实上是不必要的,比较好的做法是使用官方提供的 dump
命令。
运行 PM2 的 Dockerfile ,可以参考:
1 | FROM node:0.11.13 |
搞定。
由于个人比较喜欢在 Linux 上使用 service ,所以才有了以下的折腾。
其实,在本地开发还是比较喜欢用 supervisor 的,因为命令简单。考虑到服务器上可能会运行多个 node server 实例,因此选择 forever 来做 node 服务的管理。
1 | sudo npm install -g forever |
(这货依赖不是一般多……)
安装成功后可以看到安装路径,记下待用。以下是我的服务器环境的返回:1
/usr/local/lib/node_modules
1 | sudo vim /etc/init.d/the_name_you_want |
1 | #!/bin/bash |
345 是启动级别,99 是启动优先级(序号),01 是关闭优先级(序号)。如果有其他服务依赖于 forever 服务,可以提高优先级,以确保其他服务启动时其可用。
1 | DEAMON="/your/server/config/file/path" |
DEAMON 处给出配置文件地址,其中文件内容每行为一项任务,每项形如:
name app.js path/of/app/js
两处“xxx”是占位符,稍后替换用;
注意右边是值在引号内!!不然 forever 可能会喊它要 string,尤其是 LOG 地址。在 yum 安装环境中遇到过,make 安装环境未重现。
1 | export PATH=$PATH:/usr/local/bin |
注入环境变量,不然找不到 node 或者 -g 安装的包。上面已经提过,地址根据安装方法不同不一致,区别在于有没有 local 这一级,自己根据实际情况定夺。
1 | case "$1" in |
详细说明一下:
关于 forever 的说明:
list 命令用来查看正在运行的进程,其他命令顾名思义了。
1 | stop) |
说明
1 | stopall) |
很简单,不错解释了。
1 | reload|restart) |
用法说明
1 | list) |
没有命令时:1
2
3
4
5
6 *)
echo "Usage: /etc/init.d/noded {start|stop|restart|reload|stopall|restartall|list}"
exit 1
;;
esac
exit 0
1 | sudo chown root:root /etc/init.d/the_name_you_want |
1 | sudo chkconfig --add the_name_you_want |
可以通过如下命令来控制服务了1
2
3
4sudo service the_name_you_want start
sudo service the_name_you_want restart
sudo service the_name_you_want stop
sudo service the_name_you_want list
添加忽略监控文件的配置文件1
touch /your/watch/path/.foreverignore
如果没有 .foreverignore 会报一个 error,如下:1
2error: Could not read .foreverignore file.
error: ENOENT, open '/your/watch/path/.foreverignore'
但是你的 app.js 是会正常执行的,应该说一切正常。
而,如果没有 —watchDirectory 参数配置,你仍然会得到一个 error,如下:1
2
3
4
5
6
7error: Could not read .foreverignore file.
error: ENOENT, open '/.foreverignore'
/usr/local/lib/node_modules/forever/node_modules/forever-monitor/node_modules/watch/main.js:63
if (err) throw err;
^
Error: ENOTDIR, readdir '/proc/1/fd/5'
此时,你的 app.js 依然欢快运行,但是你执行 list 命令去看它的时候,它……1
2sudo /etc/init.d/noded list
info: No forever processes running
-w 和 —watchDirectory 要一起出现,就够了,-w 不能直接接收值也忍了,不设置后者直接出现这种奇异现象,真是……(此处省略10000字!!)
End