当我从 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 的分支。
我的服务文件(针对 Exherbo)强制 snmpd 不使用
fork()
(-f
) 并使用Type=simple
.Type=forking
是 snmpd 默认行为的好方法,但它不完整。强烈建议在使用
PIDFile
时指定,Type=forking
因为 systemd 并不总是能够知道在第一个进程退出后要监视哪个进程。只需添加:
此更改也将修复
ExecReload
.