Arch-Linux
無法從 systemd 啟動 Net-SNMP 守護程序(但它可以從命令行執行)
當我從 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
問題來自啟動期間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
。