Node APP 运维经验
指定账户运行node进程
通常通过 su 切换用户来指定特定账号(www)来运行 node 进程,操作麻烦
其实可以通过设置 NODE_USER 指定账户运行
在 bin/www(app.js)加入
if (process.env.NODE_USER) {
console.log("run as " + process.env.NODE_USER)
process.setuid(process.env.NODE_USER)
}
1
2
3
4
2
3
4
直接运行
NODE_USER=www node ./bin/www
1
pm2 运行
NODE_USER=www pm2 start pm2.json
1
终极方案
将NODE_USER 加入到 pm2.json 的 env配置中
{
// ...
"env": {
"PORT": 9066,
"NODE_USER": "www"
}
// ...
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
pm2 调整
pm2默认运行目录是当前用户的 $HOME/.pm2, 这样每个用户都会是一个新的守护进程,无法互相查看。
比如你在 www 账户启动一个 app,但你在 root 账户下执行 pm2 list 却无法查看到这个 app 的信息。
这个问题可以通过指定环境变量 PM2_HOME 来指定 .pm2 的位置,例如将它指定到 /var/run/pm2 方便所有用户访问即可解决。
编辑文件 /etc/profile ,加入
export PM2_HOME="/var/run/pm2"
1
执行
pm2 kill
source /etc/profile
chmod -R 777 /var/run/pm2
pm2 start pm2.json
1
2
3
4
2
3
4