當 Gearman 服務意外停止時,客戶端程式會拋出 gearman.errors.ServerUnavailable: Found no valid connections 錯誤。這通常發生在伺服器重啟或服務異常終止後。錯誤堆疊明確指向 localhost:4730 連線失敗,確認是 Gearman Job Server 未運行。
執行 gearmand -d 時若提示 /var/log/gearman/gearman.log 不存在,需手動建立目錄與檔案:
mkdir -p /var/log/gearman
touch /var/log/gearman/gearman.log
chown -R gearman:gearman /var/log/gearman # 確保服務帳號有寫入權限
gearmand --log-file=/var/log/gearman/gearman.log --listen=127.0.0.1 --port=4730 --verbose=INFO
此模式下日誌直接輸出至終端,方便即時觀察錯誤。
gearmand --log-file=/var/log/gearman/gearman.log --listen=127.0.0.1 --port=4730 --verbose=INFO --daemon
--listen:綁定本地回環介面,拒絕外部直接存取,提升安全性--port:預設 4730,可依防火牆規則調整--daemon:以守護進程方式運行netstat -tlnp | grep 4730
# 或
telnet 127.0.0.1 4730
若顯示 LISTEN 狀態或連線成功,即表示服務已正常啟動。
建立 /etc/systemd/system/gearmand.service:
[Unit]
Description=Gearman Job Server
After=network.target
[Service]
Type=forking
ExecStart=/usr/sbin/gearmand --log-file=/var/log/gearman/gearman.log --listen=127.0.0.1 --port=4730 --daemon
PIDFile=/var/run/gearmand.pid
User=gearman
Group=gearman
[Install]
WantedBy=multi-user.target
隨後執行:
systemctl daemon-reload
systemctl enable --now gearmand
systemctl status gearmand
如此即可實現開機自啟、異常自動重啟等生產級管理。