最近一直在用上篇文章里提到的 Ubuntu on Android
跑些后台任务,screen 用起来似乎并不是很方便,这里考虑使用 pm2 来管理后台的进程。
安装node、npm、pm2:
- sudo apt-get install nodejs-legacy
- sudo apt-get install npm
- sudo npm install npm@latest -g
- sudo npm install -g n
- 上面(3)升级 npm 到最新时可能会出导致(4)安装 n 报错(node版本过低)。如果出现这个问题,解决方法: 先删掉刚刚升级的 npm(sudo mv /usr/local/lib/node_modules/npm/ /tmp/usr_local_lib_node_modules_npm),然后先装 n(4),再升 node(3),再升 npm(下面这条 6)。也可以按照(4、3、6)顺序安装。
- sudo n stable
- 看下版本 sudo node -v sudo npm -v
- npm install pm2 -g
生成配置文件
以 Python 为例,使用 pm2 init 生成一份配置文件(js),或者自己手动创建这样的(json也可以,可以找找格式要求):
module.exports = {
apps : [{
name: 'wzry-pm2', // 任务名
exec_interpreter: 'bash', // 利用 bash 启动 Python,因为script没法指示 py 代码的路径
script: 'wzry-pm2.sh', // 比如 env PYTHONIOENCODING=utf-8 python /xxx/yyyy.py 前面 env是因为 pm2 会重定向 log 到磁盘文件,如果程序中有中文输出,则需要用环境变量指定编码
args: '',
instances: 1, //下面这些参数可有可无,有些这里也省略掉了 比如 log 路径
autorestart: false,
watch: false,
env: {
NODE_ENV: 'development'
},
env_production: {
NODE_ENV: 'production'
}
}],
};
任务控制
pm2 start 配置文件名
开始一项任务(初次运行)
pm2 ls
列出任务
pm2 delete 任务名/配置文件名/id/all
停止并删除
pm2 stop 任务名/配置文件名/id/all
停止
pm2 start 任务名/配置文件名/id/all
启动
pm2 restart 任务名/配置文件名/id/all
重启
日志
查看日志:pm2 logs 任务名/id/all
如果没有配置 log 路径,默认日志文件在 ~/.pm2/logs/ 下
清空日志:pm2 flush
另外有个小缺点,(可能)因为是通过 bash 运行的 python,pm2 的性能监测功能是失效的。