文章目錄
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