Ubuntu18.04 部署Python腳本開機自啓,最穩定解決方案

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啓動的程序
  1. 安裝Node.js
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
apt install -y nodejs
  1. 安裝 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章