linux命令 systemctl 和 supervisord 區別及用法解讀

目錄

  1. 基礎與背景
  2. 服務管理范圍
  3. 配置文件和管理方式
  4. 監控與日志
  5. 依賴管理
  6. 適用場景
  7. 常用命令對照表
  8. 實際應用場景舉例
  9. 優缺點對比小結
  10. 參考鏈接

1. 基礎與背景

systemctl 和 supervisord 都是用于管理和控制服務(進程)的工具,但它們在設計、使用場景和功能上有所不同。以下是它們之間的主要區別:

  • systemctl:
    • systemctl 是 systemd 的一部分,systemd 是 Linux 系統中的系統和服務管理器,負責在系統啟動時管理系統進程、掛載文件系統、處理網絡配置等。
    • systemctl 通過管理 systemd 單元(unit files)來控制系統服務。
    • systemctl 通常是現代 Linux 發行版中的默認服務管理工具(如 CentOS 7+, Ubuntu 15.04+)。
  • supervisord:
    • supervisord 是一個進程管理工具,專門用于監控和管理獨立的后臺進程。
    • 它是 Python 編寫的,并且被設計用于跨平臺運行,主要用于啟動、監控、重啟應用程序。
    • supervisor 最早主要用于開發環境和特定服務的進程管理,通常不管理系統服務。

2. 服務管理范圍

  • systemctl(systemd):
    • 負責管理所有系統服務,包括啟動、停止、重啟、啟用(開機啟動)和禁用服務。
    • 可以管理系統級別的服務,比如網絡服務、守護進程等。
    • 更側重于系統啟動時的服務管理,并且可以管理定時任務(通過 timers)、設備掛載、網絡配置等。
  • supervisord:
    • 主要用于管理用戶定義的應用進程,例如應用程序、后臺任務、Web服務等。
    • 適合多進程的應用程序或需要長期運行的任務的監控和管理。
    • supervisor 可以定期監控和重啟由于異常退出的進程。

3. 配置文件和管理方式

  • systemctl:
    • 使用 unit files,它們位于 /etc/systemd/system/ 或 /lib/systemd/system/ 目錄下。這些文件通常以 .service、.target、.mount、.timer 等后綴結尾。
    • 配置文件格式相對固定,基于 INI 風格,包含 [Unit]、[Service]、[Install] 等配置段。
    • 常見命令:
      • systemctl start/stop/restart :啟動/停止/重啟服務。
      • systemctl enable/disable :啟用/禁用服務開機啟動。

systemctl(systemd)配置文件示例

示例1:簡單的自定義服務
[Unit]
Description=My Simple Service
After=network.target[Service]
ExecStart=/usr/bin/python3 /opt/myscript.py
Restart=on-failure[Install]
WantedBy=multi-user.target

說明:此配置定義了一個在網絡服務啟動后運行的 Python 腳本服務,異常退出時自動重啟。

示例2:帶環境變量和工作目錄的服務
[Unit]
Description=Node.js Web App[Service]
WorkingDirectory=/opt/webapp
ExecStart=/usr/bin/node server.js
Environment=NODE_ENV=production PORT=8080
Restart=always[Install]
WantedBy=multi-user.target

說明:此配置用于 Node.js Web 應用,指定了工作目錄和環境變量,并設置為始終重啟。

  • supervisord:
    • 使用獨立的配置文件,通常位于 /etc/supervisor/supervisord.conf 或類似目錄中。
    • 進程定義在 [program:x] 區塊中,指定每個進程的啟動命令、環境變量、日志、重啟策略等。
    • 常見命令:
      • supervisorctl start/stop :啟動/停止某個進程。
      • supervisorctl reread/update:重新讀取配置文件并應用更改。

supervisord 配置文件示例

示例1:管理單個 Python 進程
[program:myworker]
command=python3 /opt/worker.py
autostart=true
autorestart=true
stderr_logfile=/var/log/myworker.err.log
stdout_logfile=/var/log/myworker.out.log

說明:此配置定義了一個自動啟動和自動重啟的 Python worker 進程,并分別記錄標準輸出和錯誤日志。

示例2:管理 Node.js 服務并設置環境變量
[program:webapp]
command=node /opt/webapp/server.js
directory=/opt/webapp
autostart=true
autorestart=true
environment=NODE_ENV="production",PORT="8080"
stdout_logfile=/var/log/webapp.log
stderr_logfile=/var/log/webapp.err.log

說明:此配置用于 Node.js 服務,指定了工作目錄和環境變量,并配置了日志輸出。

supervisord 可視化界面(Web UI)配置示例

Supervisor 自帶一個簡單的 Web 管理界面,可以通過配置 [inet_http_server] 實現。該界面支持進程的啟動、停止、重啟、日志查看等操作。

示例:啟用 Web 管理界面
[inet_http_server]
port=0.0.0.0:9001        ; 監聽所有網卡的 9001 端口
username=admin          ; 登錄用戶名
password=123456         ; 登錄密碼

說明:此配置啟用了 supervisord 的 Web UI,訪問 http://服務器IP:9001 即可進入管理界面。可通過用戶名和密碼進行身份驗證。

Web UI 功能簡介:

  • 查看所有受管進程的狀態
  • 啟動、停止、重啟進程
  • 查看進程日志
  • 便于遠程管理和監控

注意:生產環境建議配置防火墻或反向代理,限制 Web UI 的訪問范圍,避免安全風險。

詳細說明

Supervisor 的 Web UI 是一個基于 HTTP 的管理界面,默認集成在 supervisord 主進程中,無需額外安裝。通過 Web 瀏覽器即可遠程管理和監控所有受 supervisord 管理的進程。

1. 訪問方式

  • 啟用 [inet_http_server] 后,在瀏覽器中訪問 http://<服務器IP>:9001
  • 需要輸入配置文件中設置的用戶名和密碼進行登錄。
  • 支持局域網和公網訪問(建議生產環境僅限內網或通過 VPN/反向代理訪問)。

2. 界面主要功能

  • 進程狀態總覽:主界面顯示所有受管進程的名稱、狀態(RUNNING、STOPPED、FATAL 等)、啟動時間、進程號等。
  • 進程操作:可對單個或全部進程進行啟動、停止、重啟操作。
  • 日志查看:可直接在網頁中查看每個進程的標準輸出(stdout)和標準錯誤(stderr)日志,支持實時刷新。
  • 進程分組:如果配置了 group,可以分組顯示和管理進程。
  • 自動刷新:界面支持自動刷新,便于實時監控。

3. 常見操作演示

  • 啟動/停止/重啟進程:點擊對應進程后的"Start"、“Stop”、"Restart"按鈕即可。
  • 查看日志:點擊"View Log"可彈出日志窗口,支持滾動和刷新。
  • 一鍵操作全部進程:頁面頂部有"Start All"、“Stop All”、"Restart All"按鈕。

4. 權限與安全建議

  • 默認僅支持單一用戶名和密碼,建議設置復雜密碼。
  • 建議僅監聽 127.0.0.1(即 port=127.0.0.1:9001),通過 SSH 隧道、VPN 或 Nginx 反向代理(帶認證)進行訪問。
  • 如需公網訪問,務必做好防火墻限制和強密碼設置。
  • 不支持多用戶分級權限,適合小型團隊或個人運維場景。

5. 常見問題

  • 端口被占用:如 9001 端口被占用,可修改為其他未被占用端口。
  • 無法訪問:檢查 supervisord 是否已重啟、端口監聽地址是否正確、防火墻是否放行。
  • 安全風險:切勿將 Web UI 直接暴露在公網,避免被暴力破解。

6. 相關截圖與文檔

  • 官方界面截圖可參考:Supervisor Web UI 截圖
  • 更多配置說明見:Supervisor 官方文檔 - inet_http_server

4. 監控與日志

  • systemctl:
    • systemd 自帶強大的日志管理功能,通過 journalctl 來查看系統和服務的日志。
    • 支持將日志集中管理并可以通過高級過濾器進行查詢。
  • supervisord:
    • supervisor 支持為每個進程定義獨立的日志文件,并可以配置標準輸出和錯誤輸出重定向。
    • 可以實時查看每個進程的日志文件,但不會像 systemd 那樣提供統一的日志查看命令。

5. 依賴管理

  • systemctl:
    • 可以處理服務之間的依賴關系。例如,服務 A 依賴于服務 B,那么 systemd 可以確保在啟動 A 之前先啟動 B。
    • 可以通過 Before=, After=, Requires=, Wants= 等指令來設置依賴順序。
  • supervisord:
    • 不直接處理依賴關系。各個進程通常被獨立管理,如果需要依賴關系管理,需要手動配置順序或借助外部工具。

6. 適用場景

  • systemctl(systemd):
    • 更適合管理系統級別的服務、網絡服務、守護進程、設備掛載等。
    • 推薦用于服務器和系統服務的管理,因為它提供了豐富的功能來處理服務依賴、啟動順序、資源限制等。
  • supervisord:
    • 更適合管理獨立應用程序、Web 服務、批處理任務或需要獨立監控的進程。
    • 尤其適合開發環境或容器中需要管理多個進程的情況。

7. 常用命令對照表

功能systemctl 命令supervisord/supervisorctl 命令
啟動服務/進程systemctl start supervisorctl start
停止服務/進程systemctl stop supervisorctl stop
重啟服務/進程systemctl restart supervisorctl restart
查看狀態systemctl status supervisorctl status
開機自啟systemctl enable 配置 autostart=true
禁用開機自啟systemctl disable 配置 autostart=false
查看日志journalctl -u 查看配置的日志文件
重新加載配置systemctl daemon-reloadsupervisorctl reread/update

8. 實際應用場景舉例

  • systemctl 典型場景
    • 管理 Nginx、MySQL、Docker 等系統服務
    • 設置服務開機自啟
    • 管理定時任務、設備掛載等
  • supervisord 典型場景
    • 管理 Python、Node.js 等 Web 應用進程
    • 監控爬蟲、定時腳本等長期運行的任務
    • 容器(如 Docker)中一鍵管理多個自定義進程

9. 優缺點對比小結

對比項systemctl (systemd)supervisord
管理對象系統服務、守護進程應用進程、用戶自定義進程
配置復雜度較高,需編寫 unit 文件較低,配置靈活
日志管理集中管理,支持過濾各進程獨立日志
依賴管理支持服務依賴、啟動順序不支持,需要手動處理
適用場景系統服務、服務器、生產環境應用進程、開發環境、容器
自動重啟支持(需配置 Restart)默認支持
跨平臺僅 Linux跨平臺(Python 環境)

10. 參考鏈接

  • systemd 官方文檔
  • Supervisor 官方文檔
  • systemctl 使用詳解
  • Supervisor 配置詳解

兩者可以根據不同的場景結合使用。如果你的需求是管理系統服務,systemctl 是更合適的選擇;如果你需要監控和自動重啟特定的應用程序進程,supervisord 更適合。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/85630.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/85630.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/85630.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

(11)java+ selenium->元素定位之By_tag_name

1.簡介 繼續WebDriver關于元素定位,這篇介紹By ClassName。tagName是DOM結構的一部分,其中頁面上的每個元素都是通過輸入標簽,按鈕標簽或錨定標簽等標簽定義的。每個標簽都具有多個屬性,例如ID,名稱,值類等。就其他定位符而言在Selenium中,我們使用了標簽的這些屬性值來…

2021 RoboCom 世界機器人開發者大賽-高職組(復賽)解題報告 | 珂學家

前言 題解 2021 RoboCom 世界機器人開發者大賽-高職組&#xff08;復賽&#xff09;解題報告。 模擬題為主&#xff0c;包含進制轉換等等。 最后一題&#xff0c;是對向量/自定義類型&#xff0c;重定義小于操作符。 7-1 人工智能打招呼 分值: 15分 考察點: 分支判定&…

day42 簡單CNN

目錄 一、從圖像分類任務談起 二、CNN架構解剖實驗室 2.1 卷積層&#xff1a;空間特征的魔法師 2.2 歸一化層&#xff1a;加速收斂的隱形推手 2.3 激活函數&#xff1a;非線性的靈魂 三、工程實踐避坑指南 3.1 數據增強工程 3.2 調度器工程實戰 四、典型問題排查手冊 …

Gitee Wiki:以知識管理賦能 DevSecOps,推動關鍵領域軟件自主演進

關鍵領域軟件研發中的知識管理困境 傳統文檔管理模式問題顯著 關鍵領域軟件研發領域&#xff0c;傳統文檔管理模式問題顯著&#xff1a;文檔存儲無系統&#xff0c;查找困難&#xff0c;降低效率&#xff1b;更新不及時&#xff0c;與實際脫節&#xff0c;誤導開發&#xff1…

清理 pycharm 無效解釋器

1. 起因&#xff0c; 目的: 經常使用 pycharm 來調試深度學習項目&#xff0c;每次新建虛擬環境&#xff0c;都是顯示一堆不存在的名稱&#xff0c;刪也刪不掉。 總覺得很煩&#xff0c;是個痛點。決定深入研究一下。 2. 先看效果 效果是能行&#xff0c;而且清爽多了。 3. …

【ConvLSTM第二期】模擬視頻幀的時序建模(Python代碼實現)

目錄 1 準備工作&#xff1a;python庫包安裝1.1 安裝必要庫 案例說明&#xff1a;模擬視頻幀的時序建模ConvLSTM概述損失函數說明&#xff08;python全代碼&#xff09; 參考 ConvLSTM的原理說明可參見另一博客-【ConvLSTM第一期】ConvLSTM原理。 1 準備工作&#xff1a;pytho…

MySQL DDL操作全解析:從入門到精通,包含索引視圖分區表等全操作解析

目錄 一、DDL 基礎概述 1.1 DDL 定義與作用 1.2 DDL 語句分類 1.3 數據類型與存儲引擎 1.3.1 數據類型 1.3.2 存儲引擎差異 二、基礎 DDL 語句詳解 2.1 創建數據庫與表 2.1.1 創建數據庫 2.1.2 創建表 2.2 修改表結構 2.2.1 添加列 2.2.2 修改列屬性 2.2.3 刪除列…

設計模式——抽象工廠設計模式(創建型)

摘要 抽象工廠設計模式是一種創建型設計模式&#xff0c;旨在提供一個接口&#xff0c;用于創建一系列相關或依賴的對象&#xff0c;無需指定具體類。它通過抽象工廠、具體工廠、抽象產品和具體產品等組件構建&#xff0c;相比工廠方法模式&#xff0c;能創建一個產品族。該模…

Express教程【006】:使用Express寫接口

文章目錄 8、使用Express寫接口8.1 創建API路由模塊8.2 編寫GET接口8.3 編寫POST接口 8、使用Express寫接口 8.1 創建API路由模塊 1??新建routes/apiRouter.js路由模塊&#xff1a; /*** 路由模塊*/ // 1-導入express const express require(express); // 2-創建路由對象…

【iOS(swift)筆記-14】App版本不升級時本地數據庫sqlite更新邏輯二

App版本不升級時&#xff0c;又想即時更新本地數據庫怎么辦&#xff1f; 辦法二&#xff1a;從服務器下載最新的sqlite數據替換掉本地的數據&#xff08;注意是數據不是文件&#xff09; 稍加調整&#xff0c; // &#xff01;&#xff01;&#xff01;注意&#xff01;&…

Mac電腦_鑰匙串操作選項變灰的情況下如何刪除?

Mac電腦_鑰匙串操作選項變灰的情況下如何刪除&#xff1f; 這時候 可以使用相關的終端命令進行操作。 下面附加文章《Mac電腦_鑰匙串操作的終端命令》。 《Mac電腦_鑰匙串操作的終端命令》 &#xff08;來源&#xff1a;百度~百度AI 發布時間&#xff1a;2025-06&#xff09;…

對接系統外部服務組件技術方案

概述 當前系統需與多個外部系統對接,然而外部系統穩定性存在不確定性。對接過程中若出現異常,需依靠雙方的日志信息來定位問題,但若日志信息不夠完整,會極大降低問題定位效率。此外,問題發生后,很大程度上依賴第三方的重試機制,若第三方缺乏完善的重試機制,就需要手動…

WAF繞過,網絡層面后門分析,Windows/linux/數據庫提權實驗

一、WAF繞過文件上傳漏洞 win7&#xff1a;10.0.0.168 思路&#xff1a;要想要繞過WAF&#xff0c;第一步是要根據上傳的內容找出來被攔截的原因。對于文件上傳有三個可以考慮的點&#xff1a;文件后綴名&#xff0c;文件內容&#xff0c;文件類型。 第二步是根據找出來的攔截原…

一文學會c++中的內存管理知識點

文章目錄 c/c內存管理c語言動態內存管理c動態內存管理new/delete自定義類型妙用operator new和operator delete malloc/new&#xff0c;free/delete區別 c/c內存管理 int globalVar 1;static int staticGlobalVar 1;void Test(){static int staticVar 1;int localVar 1;in…

深入解析Linux死鎖:原理、原因及解決方案

Linux死鎖是系統資源管理的致命陷阱&#xff0c;平均每年導致全球數據中心約??3.7億小時??的服務中斷。本文深度剖析死鎖形成的??四個必要條件??和六種典型死鎖場景&#xff0c;結合Linux內核源碼層級的資源管理機制&#xff0c;揭示文件系統鎖、內存分配、多線程同步等…

SKUA-GOCAD入門教程-第八節 線的創建與編輯2

8.1.3根據線創建曲線 (1)從線生成線 這個命令可以將一組曲線合并為一條曲線。每個輸入曲線都會成為新曲線內的一個部分。 1、選擇 Curve commands > New > Curves 打開對話框。 圖1 根據曲線創建曲線 在“name”框中

『uniapp』把接口的內容下載為txt本地保存 / 讀取本地保存的txt文件內容(詳細圖文注釋)

目錄 預覽效果思路分析downloadTxt 方法readTxt 方法 完整代碼總結 歡迎關注 『uniapp』 專欄&#xff0c;持續更新中 歡迎關注 『uniapp』 專欄&#xff0c;持續更新中 預覽效果 思路分析 downloadTxt 方法 該方法主要完成兩個任務&#xff1a; 下載 txt 文件&#xff1a;通…

攻防世界-unseping

進入環境 在獲得的場景中發現PHP代碼并進行分析 編寫PHP編碼 得到 Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czozOiJwd2QiO319 將其傳入 想執行ls&#xff0c;但是發現被過濾掉了 使用環境變量進行繞過 $a new…

IP查詢與網絡風險的關系

網絡風險場景與IP查詢的關聯 網絡攻擊、惡意行為、數據泄露等風險事件頻發&#xff0c;而IP地址作為網絡設備的唯一標識&#xff0c;承載著關鍵線索。例如&#xff0c;在DDoS惡意行為中&#xff0c;攻擊者利用大量IP地址發起流量洪泛&#xff1b;惡意行為通過變換IP地址繞過封…

pikachu通關教程-XSS

XSS XSS漏洞原理 XSS被稱為跨站腳本攻擊&#xff08;Cross Site Scripting&#xff09;&#xff0c;由于和層疊樣式表&#xff08;Cascading Style Sheets&#xff0c;CSS&#xff09;重名&#xff0c;改為XSS。主要基于JavaScript語言進行惡意攻擊&#xff0c;因為js非常靈活…