当我从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 。