Ubuntu10.04 开机自启
Ubuntu在16.04版本以后就不再使用 initd 管理系统了,改用 systemd 当然,我们还是可以通过软链接,创建systemd文件的形式启用rc.local。但是在rc.local中执行启动脚本也有很多不便之处,比如日志输出和守护进程。。。
更简单高效地添加开机自启和守护进程
PM2 是一个生产级流程管理器,可以轻松管理后台进程。PM2有着良好的命令行使用体验,可以用简单、方便的操作重启崩溃程序,查看程序日志和资源使用情况。
安装 PM2
PM2是 Node 界的东西,但是并不妨碍我们用它来启动Python脚本。Node 界的东西,安装之前是肯定要安装Node 的,然后是 npm注意:下面的命令需要在root账户下执行。pm2是会区分用户的,root账户启动的脚本其他账户是不可见的,必须要切换到root下执行 pm ls 才能看到root账户使用pm2启动的程序
安装Node.js
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
apt install -y nodejs安装 npm
npm install pm2 -g
使用PM2启动Python脚本
启动命令:pm2 start 文件路径 注意:这里需要在脚本内指定解释器路径,或者使用打包后的文件 我这里使用的是pyinstaller打包后的文件
pm2 start flaskDemo
查看启动列表
注意:查看root用户的启动列表需要切换到root用户下
pm2 ls
示例:
root@mydev:/home/dev# pm2 ls
┌─────┬────────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├─────┼────────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 1 │ flaskDemo │ default │ N/A │ fork │ 2287 │ 36m │ 3 │ online │ 0% │ 4.0mb │ root │ disabled │
└─────┴────────────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
Module
┌────┬───────────────────────────────────────┬────────────────────┬───────┬──────────┬──────┬──────────┬──────────┬──────────┐
│ id │ module │ version │ pid │ status │ ↺ │ cpu │ mem │ user │
├────┼───────────────────────────────────────┼────────────────────┼───────┼──────────┼──────┼──────────┼──────────┼──────────┤
│ 0 │ pm2-logrotate │ 2.7.0 │ 2146 │ online │ 0 │ 0.3% │ 43.7mb │ root │
└────┴───────────────────────────────────────┴────────────────────┴───────┴──────────┴──────┴──────────┴──────────┴──────────┘
root@mydev:/home/dev#
我这里安装了 PM2的日志管理工具,pm2-logrotate。pm2-logrotate 提供了自动化的日志轮换功能。 安装pm2-logrotate
pm2 install pm2-logrotate
查看进程日志
查看日志:pm2 logs 应用名称
pm2 logs flaskDemo
查看进程描述信息
可以通过执行下面的命令查看日志的存储路径和解释器、运行时间、脚本路径等信息。
pm2 describe flaskDemo
示例:
root@mydev:/home/dev# pm2 describe flaskDemo
Describing process with id 1 - name flaskDemo
┌───────────────────┬─────────────────────────────────────┐
│ status │ online │
│ name │ flaskDemo │
│ namespace │ default │
│ version │ N/A │
│ restarts │ 3 │
│ uptime │ 50m │
│ script path │ /home/dev/flaskDemo │
│ script args │ N/A │
│ error log path │ /root/.pm2/logs/flaskDemo-error.log │
│ out log path │ /root/.pm2/logs/flaskDemo-out.log │
│ pid path │ /root/.pm2/pids/flaskDemo-1.pid │
│ interpreter │ none │
│ interpreter args │ N/A │
│ script id │ 1 │
│ exec cwd │ /home/dev │
│ exec mode │ fork_mode │
│ node.js version │ N/A │
│ node env │ N/A │
│ watch & reload │ ✘ │
│ unstable restarts │ 0 │
│ created at │ 2019-12-09T09:01:47.911Z │
└───────────────────┴─────────────────────────────────────┘
Divergent env variables from local env
┌────────────────┬────────────────────────────────────────┐
│ SSH_CONNECTION │ 192.168.206.1 54924 192.168.206.146 22 │
│ XDG_SESSION_ID │ 2 │
│ SSH_CLIENT │ 192.168.206.1 54924 22 │
└────────────────┴────────────────────────────────────────┘
Add your own code metrics: http://bit.ly/code-metrics
Use `pm2 logs server [--lines 1000]` to display logs
Use `pm2 env 1` to display environment variables
Use `pm2 monit` to monitor CPU and Memory usage server
重启进程
重启进程:pm2 restart 应用名称
pm2 restart flaskDemo
停止进程
停止进程:pm2 stop 应用名称
pm2 stop flaskDemo
删除进程
删除进程:pm2 delete 应用名称
pm2 delete flaskDemo
让 PM2 开机自启
刚安装的PM2是不会随操作系统启动的,需要我们手动执行命令来打开PM2的开机自启功能。 在Ubuntu18.04上,这一步很简单,自动化的脚本帮我们完成了创建systemd文件和创建软链接的工作。我们只需要保存转存文件就可以了。
执行PM2自启命令
pm2 startup
很遗憾,这一步我忘记保存输出内容了。 这个命令执行后,系统会创建启动脚本,在Ubuntu18.04上是会自动添加软链接的,如果是别的版本,可能就需要你按照提示输出的命令去执行。 其它的版本可能会输出一些命令,按照提示复制到bash输入并回车就可以了,这一步其实就是添加一个系统自启服务。
最后需要我们执行下面的命令保存转存文件,这样PM2自启后就会启动我们的应用。
pm2 save