проход snmpd для запуска python - PullRequest
       24

проход snmpd для запуска python

0 голосов
/ 09 октября 2018

Я пытаюсь запросить устройство Modbus через snmp, используя snmpd, чтобы передать скрипт python для извлечения данных.

#! /bin/bash
if [ "$1" = "-g" ]
then
echo .1.3.6.1.4.1.52612.10.3.1
echo string
python /usr/local/bin/readvolt.py
fi
exit 0

И вот этот readvolt.py выглядит так:

#!/usr/bin/python
import minimalmodbus
eqp = minimalmodbus.Instrument('/dev/ttyUSB0',1) # port name, slave address (in decimal)
# skip some other lines for serial port initialization
volt = eqp.read_float(0,4,2) # getting data from serial modbus
print volt

и эта строка из моего snmpd.conf:

pass .1.3.6.1.4.1.52612.10.3.1 /bin/sh /usr/local/bin/volt.sh

мой вопрос: я получил трассировку от python, не смог найти модуль minimalmodbus, но когда я попытался запустить readvolt.py непосредственно с хоста, этоработает как положено (он может распечатать результат (вольт))

pi@raspberrypi:/usr/local/bin $ readvolt.py
220.25

Я также попытался использовать простой скрипт на python (test.py) просто для того, чтобы убедиться, что проход snmpd может запускать скрипт python при ответе snmpgetиз snmp manager

#!/usr/bin/python
import sys
print "test"

Он работает нормально:

suryo@r50e:~$ snmpwalk -v2c -c public 192.168.1.5 .1.3.6.1.4.1.52612.10.3.1
iso.3.6.1.4.1.52612.10.3.1 = STRING: "test"
suryo@r50e:~$ 

В чем здесь проблема?Кажется, что Python не может импортировать внешний модуль, когда он запускается с помощью snmpd pass.Я думаю, что если это проблема контроля доступа, Debian-snmp не имеет права доступа к последовательному порту.

1 Ответ

0 голосов
/ 10 октября 2018

Проблема решена путем определения имени пользователя демона snmpd.Я включил в сценарий whoami и получил 'Debian-snmp', затем стал прямым, проверяя членство в группе, выполнив:

pi@rraspberrypi:~$ groups Debian-snmp
Debian-snmp : Debian-snmp

Поместите Debian-snmp в членство в dialout, чтобы предоставить полный доступ к последовательным портам:

pi@raspberrypi:~ $ sudo usermod -a  -G dialout Debian-snmp

Перезапустите snmpd, чтобы войти в систему с новым членством, и вуаля. Он может прочитать ведомое устройство Modbus из команды snmp / snmpget

...