使用supervisor管理一些進程很方便,但是最近由於linux打補丁需要重啟,為了系統重啟后這些進程也能正常啟動,supervisor的自啟動就很關鍵了。
Systemd 的設計目標是,為系統的啟動和管理提供一套完整的解決方案。
根據 Linux 慣例,字母d是守護進程(daemon)的縮寫。 Systemd 這個名字的含義,就是它要守護整個系統。使用了 Systemd,就不需要再用init了。Systemd 取代了initd,成為系統的第一個進程(PID 等於 1),其他進程都是它的子進程。Systemd 的優點是功能強大,使用方便,缺點是體系龐大,非常復雜。
下面介紹我使用systemd來添加supervisor的開機自啟服務。
1、在/lib/systemd/system/中添加supervisord.service文件
[Unit] # 通常是第一個區塊,定義Unit元數據信息以及與其他服務的依賴關系
Description=Supervisord Service # 簡短描述
[Service] # Service,只有 Service 類型的 Unit 才有這個區塊
Restart=on-failure # 定義重啟方式: always(總是重啟)、on-failure(發生意外退出就重啟)
RestartSec=20s # 自動重啟當前服務間隔的秒數
User=root
ExecStart=/usr/local/bin/supervisord -n -c /etc/supervisord.conf # 啟動某個服務的具體命令
[Install] # 通常是配置文件最后一個區塊,定義服務如何啟動以及是否開機啟動
WantedBy=multi-user.target # 指定一個或多個Target
2、執行以下命令
# 重載所有修改過的配置文件
sudo systemctl daemon-reload
# 如果配置文件里面設置了開機啟動,systemctl enable命令相當於激活開機啟動
sudo systemctl enable supervisord.service
# 啟動supervisor
sudo systemctl start supervisord.service
3、然后重啟便能看見supervisor能夠自啟動
# 重啟系統【請確定服務器沒有重要程序在運行】
sudo systemctl reboot
# 查看supervisor server運行狀態
sudo systemctl status supervisord.service
4、問題
開始我的ExecStart=/usr/local/bin/supervisord -n -c /etc/supervisord.conf 命令中,我沒有增加-n參數,因為平時手動啟動supervisor沒有使用該參數,然后重啟服務器后發現supervisor沒有成功自啟。
通過supervisord -help 查看到-n參數解釋為:nodaemon -- run in the foreground (same as 'nodaemon=true' in config file)【Nodaemon——運行在前台(與配置文件中的' Nodaemon =true'相同)】