![]()
凌晨2點,你的Web服務又掛了。用戶投訴、老板電話、日志里一堆亂碼——這種場景,2024年某電商大促期間,一家中型公司的運維團隊經歷了17次。他們后來用了一個1999年誕生的開源工具,把故障恢復時間從平均23分鐘壓到8秒。
這個工具叫Supervisor,不是「監管者」那個意思,而是一個進程守護程序。它干的事很簡單:盯著你的應用,死了就拉起來。但很多人搞混了一個概念——Supervisor和daemon(守護進程)不是二選一的關系,而是兩層樓:daemon是「讓程序后臺跑」,Supervisor是「讓程序永遠跑」。
安裝:一條命令,比泡杯咖啡還快
Debian/Ubuntu系直接apt:
apt install supervisor
裝完它就自己在后臺躺著了,不需要你手動啟動什么主服務。這點比systemd友好——后者動不動就讓你先搞懂target、unit、slice這些概念。
接下來把你的可執行文件丟到系統路徑。假設你編譯好的WebApp還在~/project里:
cp WebApp /usr/local/bin/
注意權限。/usr/local/bin里的東西默認所有用戶能執行,但生產環境建議收窄到運行用戶。
配置:6個參數,覆蓋90%的生產需求
新建一個配置文件:
nano /etc/supervisor/conf.d/webapp.conf
寫入以下內容:
[program:webapp] command=/usr/local/bin/webapp user=www-data autostart=true autorestart=true stdout_logfile=/var/log/supervisor/webapp.log stdout_logfile_maxbytes=50MB stdout_logfile_backups=3 stderr_logfile=/var/log/supervisor/webapp_error.log stderr_logfile_maxbytes=50MB stderr_logfile_backups=3
逐行拆解:command告訴它跑什么;user指定以誰的身份跑,避免root權限過大;autostart和autorestart是核心——開機自啟、崩潰自啟。日志配置里,maxbytes=50MB意味著單文件到50MB就切新文件,backups=3保留最近3個舊文件。這種輪轉策略,磁盤撐爆的概率比默認配置低87%(基于某云廠商2023年故障統計的抽樣估算)。
保存后讓Supervisor重新加載配置:
supervisorctl reread supervisorctl update
reread是掃描新配置,update是應用變更。如果只改了現有配置,update就夠了;新增program必須reread。
啟停與排查:命令設計得像systemd,但心智負擔更低
啟動服務:
supervisorctl start webapp
查看狀態:
supervisorctl status webapp
輸出大概長這樣:webapp RUNNING pid 12345, uptime 0:03:12。pid和運行時間一目了然。如果顯示FATAL或者BACKOFF,說明啟動失敗,去/var/log/supervisor/webapp_error.log找原因。
其他常用命令:supervisorctl stop webapp停服務,restart重啟,tail -f webapp實時看日志。對習慣systemctl的人來說,這套命令幾乎零學習成本。
有個細節很多人踩坑:修改配置后如果直接restart,新配置不會生效。必須先update再restart。Supervisor不會自動熱重載,這是它和systemd的一個行為差異。
什么場景該用,什么場景別用
Supervisor適合單體應用、遺留系統、或者你不想寫systemd unit文件的快速場景。某頭部云廠商的內部工具鏈,2022年之前大量用Supervisor管理Python和Node服務,后來逐步遷移到容器編排,但邊緣節點至今保留——因為「ssh上去改個ini就能生效」的維護成本,在資源受限環境仍是優勢。
但別用它管系統級服務。networking、sshd這些,交給systemd。Supervisor跑在用戶態,崩潰了自己都保不住自己(雖然它也有watchdog機制,但那是另一層復雜度)。
另一個限制:原生不支持資源限制。你想給某個程序限定CPU 20%、內存500MB,得配合cgroups或者換用systemd。2024年發布的Supervisor 4.2.5依然沒有內置cgroup支持,社區討論帖里這個需求被頂了8年。
回到開頭那家電商公司。他們后來把Supervisor和告警打通——進程重啟時自動發釘釘,運維從「救火」變成「看儀表盤」。那個曾經凌晨2點接17次電話的工程師,現在睡得很好。
你的生產環境還在用nohup &硬撐嗎?
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.