Arch-Linux

無法從 systemd 啟動 Net-SNMP 守護程序(但它可以從命令行執行)

  • April 7, 2013

當我從 systemd 啟動 Net-SNMP 時,沒有錯誤消息但守護程序沒有執行:

% sudo systemctl start snmpd
%

當我從命令行啟動它時,它執行:

% sudo /usr/sbin/snmpd

並回答 SNMP 查詢。

如果我添加調試標誌 (-LSdd),我會看到 systemd 啟動的守護程序在以下情況後立即被殺死:

Apr  7 15:37:50 localhost snmpd[1298]: NET-SNMP version 5.7.2
Apr  7 15:37:50 localhost snmpd[1298]: Received TERM or STOP signal...  shutting down...

服務文件是 Arch Linux 軟體包的預設文件之一:

[Unit]
Description=Simple Network Management Protocol (SNMP) Daemon
After=syslog.target network.target

[Service]
Type=forking
ExecStart=/usr/sbin/snmpd 
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

如果我在服務文件中添加 RemainAfterExit=yes,snmpd 工作但機器不再正常啟動(例如,沒有 DHCP 客戶端)

系統是最新的Arch Linux,包的版本是:

Name           : net-snmp
Version        : 5.7.2-3

對於這個錯誤,顯然有一個舊的 Arch Linux 錯誤報告:https ://bugs.archlinux.org/task/32258?string=snmp&project=1&type%5B0%5D=&sev%5B0%5D=&pri%5B0%5D= &due%5B0%5D=&reported%5B0%5D=&cat%5B0%5D=&status%5B0%5D=open&percent%5B0%5D=&opened=&dev=&closed=&duedatefrom=&duedateto=&changedfrom=&changedto=&openedfrom=&openedto=&closedfrom= &closeto=

問題來自啟動期間snmpd的fork。

我的服務文件(用於 Exherbo)強制 snmpd 不使用fork()( -f) 並使用Type=simple.

Type=forking是 snmpd 的預設行為的好方法,但它是不完整的。

強烈建議在使用PIDFile時指定,Type=forking因為 systemd 並不總是能夠知道在第一個程序退出後要監視哪個程序。

只需添加以下內容:

Type=forking
PIDFile=/var/run/snmpd.pid
ExecStart=/usr/sbin/snmpd -p /var/run/snmpd.pid

此更改也將修復ExecReload

引用自:https://serverfault.com/questions/497004