无法从systemd启动Net-SNMP守护程序(但它可以从命令行运行)

当我从systemd启动Net-SNMP时,没有错误消息,但守护进程不运行:

% sudo systemctl start snmpd % 

当我从命令行启动它时,它运行:

 % sudo /usr/sbin/snmpd 

并回答SNMP查询。

如果我添加debugging标志(-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的错误报告显然是这个bug: https : //bugs.archlinux.org/task/32258?string=snmp&project=1& type%5B0%5D =& sev%5B0%5D =& pri%5B0%5D = &因%5B0%5D =报道%5B0%5D =猫%5B0%5D =状态%5B0%5D =开放和百分之%5B0%5D =打开=开发=closures= duedatefrom = duedateto = changedfrom = changedto = openedfrom = openedto = closedfrom = &closedto =

问题来自启动期间的snmpd分支。

我的服务文件(对于Exherbo)强制snmpd不使用fork() (- -f )并使用Type=simple运行服务。

Type=forking是snmpd默认行为的好方法,但是不完整。

强烈build议在使用Type=forking时指定PIDFile ,因为systemd在第一个进程退出后并不总能知道要监视哪个进程。

只需添加这个:

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

此更改也将修复ExecReload