Hermes Agent on Ubuntu:如何查詢執行、如何啟動、如何開機自動背景常駐
· #Hermes #systemd #Ubuntu #技術隨筆
Hermes Agent 是 Nous Research 推出的開源 AI agent 框架,有 CLI、桌面版、網頁 dashboard、訊息平台閘道(gateway)等多種執行面向。把對話之外的長駐程序(尤其是負責連接 Telegram / Discord / WhatsApp 等平台的 gateway)交給 systemd 管理,是官方設計的最穩健做法。這篇整理 Ubuntu 上的三個實務問題:如何查詢 Hermes 是否執行中、如何啟動,以及如何讓它重開機後自動在背景常駐。
好消息是:官方其實內建了一組直接可用的「一鍵指令」,不用自己寫 service 檔。 這篇會以官方指令為主,再附上它背後的手動 systemd 原理。
一、Hermes Agent 有哪些執行方式要先分清楚
動手之前,先釐清 Hermes 有兩種性質完全不同的執行:
- 互動式 CLI:你在終端機裡
hermes直接對話那支。它是「一開一關」的,不需要常駐,SSH 斷線就結束。 - 長駐程序(gateway / dashboard):負責在背景持續接收訊息、執行排程任務。這才是需要「開機自動啟、崩潰自動重啟、崩潰後有 log」的對象。
官方設計裡,長駐程序交給內建的 hermes gateway 指令集管理,而不是裸用 nohup 或 tmux。
二、如何查詢 Hermes 是否執行中
最直接的是用官方內建的狀態指令:
hermes gateway status
它會顯示 systemd 服務是否 active (running)、Main PID、佔用記憶體、最近 log,並在最後總結兩件事:服務是否在跑、lingering(背景存活)是否已啟用。例如:
✓ User gateway service is running
✓ Systemd linger is enabled (service survives logout)
若沒用系統服務管理、只想肉眼確認,也可以:
ps -ef | grep hermes
寫作日期當下,這支指令還支援 hermes gateway status 之外的其他子指令,見下節。官方 health check hermes status 則會回報 provider 登入狀態。
三、如何啟動 Hermes
- 互動對話(前台):
hermes - 單次提問(可背景執行):
hermes chat -q "問題" - Web 管理面板:
hermes dashboard - 訊息平台閘道(長駐):交給
hermes gateway指令集,見下節。
四、最簡單做法:官方一鍵指令(推薦)
hermes gateway 提供完整的服務管理子指令:
hermes gateway install # 裝成 systemd/launchd 背景服務,開機自動啟動
hermes gateway start # 手動啟動背景服務
hermes gateway stop # 停止服務
hermes gateway restart # 重啟服務
hermes gateway status # 查詢執行狀態
hermes gateway uninstall # 反安裝服務
hermes gateway list # 列出所有 profile 與其 gateway 狀態
其中 install 是「開機自動背景常駐」的核心。它會自動產生 systemd service 檔、設定好開機啟動、並啟用 lingering,一次性搞定最繁瑣的部分。install 支援的選項:
| 選項 | 作用 |
|---|---|
--system |
安裝成 Linux 系統層級服務(開機就啟動,不需登入) |
--run-as-user USER |
系統層級服務要執行的使用者帳號 |
--start-now / --no-start-now |
安裝後是否立即啟動服務 |
--start-on-login / --no-start-on-login |
是否讓服務在登入/開機時自動啟動 |
--force |
強制重新安裝 |
常用組合(單人主機,預設是使用者層級服務):
hermes gateway install --start-now
這樣一次就完成「裝服務 + 開機自動啟動 + 立即啟動」。之後是重開機也能自動背景常駐;需要手動管控時用 start / stop / restart / status。
install 產生的 service 檔長這樣(內容以官方產生為準),關鍵設定全部由官方代勞:
[Unit]
Description=Hermes Agent Gateway - Messaging Platform Integration
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=<hermes> gateway run
WorkingDirectory=<HERMES_HOME>
Environment="PATH=<...>"
Environment="HERMES_HOME=<HERMES_HOME>"
Restart=always
RestartSec=5
KillMode=mixed
[Install]
WantedBy=default.target
五、背後的原理:systemd 與 lingering
官方指令幫你做的事,其實就是「手動建 systemd 服務」的標準流程。Ubuntu 上長駐程序自動啟動的主流做法是把它包成 systemd 服務,有兩種層級。
方式 A:使用者層級 systemd(推薦單人主機)
service 檔放在 ~/.config/systemd/user/,啟用與啟動:
systemctl --user daemon-reload
systemctl --user enable --now hermes-gateway
關鍵一步:讓使用者服務在「沒有登入」時也能在開機時跑起來,必須啟用 linger:
sudo loginctl enable-linger <user>
loginctl show-user <user> | grep Linger # 驗證結果應為 yes
少了 linger,使用者服務只會在該使用者登入時才啟動,開機時不會自動拉起。官方 hermes gateway install 已自動處理這一步。
方式 B:系統層級 systemd(多人/無需登入也想開機即跑)
service 檔放 /etc/systemd/system/,[Service] 指定執行身分、[Install] 用 WantedBy=multi-user.target;啟用用 sudo systemctl enable --now。對應到官方指令就是 hermes gateway install --system --run-as-user <user>。
坊間的 nohup / tmux 做法(不推薦)
nohup hermes gateway run > ~/.hermes/logs/gateway.log 2>&1 &
tmux new -s hermes 'hermes gateway run'
這兩種都能「背景執行」,但重開機後不會自動回來、崩潰不會自動重啟、log 管理也比較散。當作臨時手段可以,長期讓 gateway 常駐還是用官方指令或 systemd 為佳。
六、手動 service 檔的關鍵設定一次看懂
如果你偏好手動寫,或想理解官方指令做了什麼:
[Unit]的After=network-online.target+Wants=network-online.target:等網路就緒再啟動。沒有它,開機時 DNS 還沒好的那幾秒會連線失敗、重啟、再失敗。Type=simple:適合hermes gateway run這類「會一直在前景跑」的程序。Restart=on-failure/Restart=always+RestartSec:崩潰時自動重啟。Environment=...:明設PATH、HOME、HERMES_HOME。這點很重要——systemd 環境很乾淨,若不指定,hermes指令可能「找不到」或用到錯誤的資料目錄。[Install]的WantedBy:使用者層級用default.target,系統層級用multi-user.target。
七、實務範例(一台用官方 install 設好的 Ubuntu 主機)
以下是一台已用 hermes gateway install --start-now 設定完成的 Ubuntu 主機,實際查詢結果:
$ hermes gateway status
● hermes-gateway.service - Hermes Agent Gateway - Messaging Platform Integration
Loaded: loaded (.../hermes-gateway.service; enabled; preset: enabled)
Active: active (running)
Main PID: 984 (hermes)
CGroup: .../hermes-gateway.service
├─984 ... python -m hermes_cli.main gateway run
└─1121 ... node .../whatsapp-bridge/bridge.js --session ... --mode self-chat
✓ User gateway service is running
✓ Systemd linger is enabled (service survives logout)
關鍵字都到位了:服務 enabled、active (running)、linger 已啟用。就算重開機,systemd 也會在網路就緒後自動把 gateway 拉起。
八、驗證與除錯
hermes gateway status # 官方摘要:是否執行、linger 是否啟用
systemctl --user status hermes-gateway # 服務層級狀態(使用者服務)
journalctl --user -u hermes-gateway.service -f # 即時看 log
systemctl --user list-unit-files | grep hermes # 看哪些 hermes 服務 enabled
如果看到 activating (auto-restart) 或 failed,通常是開機時網路還沒就緒、PATH/HERMES_HOME 不對,或 service 檔語法有誤。用 journalctl 看最新 log 最直接。
結論
讓 Hermes 長駐、處理訊息平台與排程任務,最務實的路線是:用官方內建的 hermes gateway install 一鍵把 gateway 裝成背景服務,它會自動建好 systemd unit、設定開機自動啟動並啟用 linger。之後用 start / stop / restart / status 管理、重開機自動背景常駐都由 systemd 處理。想了解細節或做進階設定,再對照這篇的手動 systemd 原理即可。
參考來源:
- Hermes Agent 官方 FAQ & Troubleshooting — https://hermes-agent.nousresearch.com/docs/reference/faq
- Hermes Agent 官方 Installation — https://hermes-agent.nousresearch.com/docs/getting-started/installation
- 本機實測:
hermes gateway status、hermes gateway install --help輸出