воскресенье, 2 августа 2020 г.

Правка service-файла snmptrapd

После обновления на одном из серверов Debian Wheezy до Debian Stretch перестала работать обработка трапов демоном snmptrapd. Как выяснилось, проблема была в том, что snmptrapd был запущен не с теми опциями, которые были указаны в файле с его настройками. В файле /etc/default/snmptrapd была указана переменная с опциями:
TRAPDOPTS='-Lf /dev/null -n -t -Oqnet'
Реально же демон snmptrapd запускался с опциями -Lsd -f

Из-за этого в скрипт обработки трапов OID'ы попадали в символьном виде:
SNMPv2-SMI::enterprises.1332.3.1.1.4.5.0
А скрипт был расчитан на обработку OID'ов в числовом виде:
.1.3.6.1.4.1.1332.3.1.1.4.5.0
После обновления операционной системы на сервере с Debian Wheezy до Debian Stretch, в нём поменялась система инициализации с System V Init на Systemd.

В комплекте с Systemd поставляется такой service-файл /lib/systemd/system/snmptrapd.service для запуска snmptrapd:
[Unit]
Description=Simple Network Management Protocol (SNMP) Trap Daemon.
After=network.target
ConditionPathExists=/etc/snmp/snmptrapd.conf

[Service]
Environment="MIBSDIR=/usr/share/snmp/mibs:/usr/share/snmp/mibs/iana:/usr/share/snmp/mibs/ietf:/usr/share/mibs/site:/usr/share/snmp/mibs:/usr/share/mibs/iana:/usr/share/mibs/ietf:/usr/share/mibs/netsnmp"
Type=simple
ExecStart=/usr/sbin/snmptrapd -Lsd -f
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target
Как видно, опции, с которыми должен запускаться snmptrapd, в нём прошиты жёстко, а не берутся из файла /etc/default/snmptrapd.

Создал вместо этого стандартного service-файла свой собственный файл /etc/systemd/system/snmptrapd.service со следующим содержимым:
[Unit]
Description=Simple Network Management Protocol (SNMP) Trap Daemon.
After=network.target
ConditionPathExists=/etc/snmp/snmptrapd.conf

[Service]
Environment="MIBSDIR=/usr/share/snmp/mibs:/usr/share/snmp/mibs/iana:/usr/share/snmp/mibs/ietf:/usr/share/mibs/site:/usr/share/snmp/mibs:/usr/share/mibs/iana:/usr/share/mibs/ietf:/usr/share/mibs/netsnmp"
EnvironmentFile=/etc/default/snmptrapd
Type=simple
ExecStart=/usr/sbin/snmptrapd $TRAPDOPTS -f
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target
Чтобы о новом service-файле узнал systemd, нужно выполнить следующую команду:
# systemctl daemon-reload
А чтобы демон snmptrapd запустился с новыми опциями, нужно его перезапустить:
# systemctl restart snmptrapd
Теперь опции для snmptrapd стали браться из файла /etc/default/snmptrapd, как и было до этого.

Комментариев нет: