Когда я запускаю Net-SNMP из systemd, сообщения об ошибке нет, но демон не запускается:
% 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 = открытый & процент% 5B0% 5D = & open = & dev = & closed = & duedatefrom = & duedateto = & changedfrom = & changedto = & openfrom = & opento = & closedfrom = & closedto =
Проблема исходит от вилки snmpd во время запуска.
Мой служебный файл (для 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
.