LINUX.ORG.RU
ФорумAdmin

Не работают скрипты в SNMP

 ,


1

1

Добрый день помогите пожалуйста. Ситуация следующая. ubuntu 22.04 на расбери пи 2, установлен SNMP, служба работает. файл конфигурации

/etc/snmp/snmpd.conf

rocommunity public
sysLocation    myCompany
sysContact     Me <unnnder@mail.ru>
sysServices    72
agentaddress udp:161,udp6:[::1]:161
rwuser piuser authpriv
view all included .1
view all included .1.3.6.1.4.1.53864
view all included .1.3.6.1.2.1.25.1.8
#pass .1.3.6.1.2.1.25.1.8 /usr/local/bin/test_7
#work
pass .1.3.6.1.2.1.25.1.8.2 /bin/python3 /usr/local/bin/snmpCpuTemp
pass_persist .1.3.6.1.4.1.53864 /bin/python3 /usr/local/bin/gpio_snmp_pp.py
#pass 1.3.6.1.2.1.25.1.8 /bin/sh /usr/local/bin/SNMP-Temperature-Sensor-CPU
pass 1.3.6.1.4.1.53865 /usr/local/bin/gpio_snmp.py

если я запускаю скрипт

pass .1.3.6.1.2.1.25.1.8.2 /bin/python3 /usr/local/bin/snmpCpuTemp

он работает, при этом даже если поменять OID этот скрипт работает

user@raspberrypi:/usr/local/bin$ sudo systemctl restart snmpd
user@raspberrypi:/usr/local/bin$ snmpget -v3 -u piuser -l authPriv -a SHA -A myAuthPass -x AES -X myPrivPass localhost .1.3.6.1.2.1.25.1.8.3
HOST-RESOURCES-MIB::hrSystem.8.1 = Gauge32: 46

вот содержание скрипта

import sys
from subprocess import check_output
def console(cmd):
    cmd=cmd.split()
    return check_output(cmd).decode("utf-8").rstrip()
temp_cmd="cat /sys/class/thermal/thermal_zone0/temp"
if sys.argv[1] == "-g":
        print(".1.3.6.1.2.1.25.1.8.1")
        print("Gauge32")
        temp=int(console(temp_cmd))
        temp = temp/1000
        print(temp)
exit()

но когда я меняю в файле конфигурации

pass .1.3.6.1.2.1.25.1.8 /usr/local/bin/test_7

#work
#pass .1.3.6.1.2.1.25.1.8.2 /bin/python3 /usr/local/bin/snmpCpuTemp

перестает работать

user@raspberrypi:/usr/local/bin$ snmpget -v3 -u piuser -l authPriv -a SHA -A myAuthPass -x AES -X myPrivPass localhost .1.3.6.1.2.1.25.1.8.1
HOST-RESOURCES-MIB::hrSystem.8.1 = No Such Instance currently exists at this OID

вот содержание скрипта

#!/usr/bin/env python3
import sys

OID1 = ".1.3.6.1.2.1.25.1.8.1"
OID2 = ".1.3.6.1.2.1.25.1.8.2"

line = sys.stdin.readline().strip()

if not line:
    sys.exit(1)

parts = line.split()
command = parts[0]
oid = parts[1] if len(parts) > 1 else ""

if command == "get":
    if oid == OID1:
        print(OID1)
        print("string")
        print("test_7")
        sys.exit(0)
    elif oid == OID2:
        print(OID2)
        print("integer")
        print("15")
        sys.exit(0)
    else:
        sys.exit(1)

if command == "getnext":
    if oid < OID1:
        print(OID1)
        print("string")
        print("test_7")
        sys.exit(0)
    elif oid < OID2:
        print(OID2)
        print("integer")
        print("15")
        sys.exit(0)
    else:
        sys.exit(1)

sys.exit(1)

сам по себе скрипт работает

user@raspberrypi:/usr/local/bin$ snmpget -v3 -u piuser -l authPriv -a SHA -A myAuthPass -x AES -X myPrivPass localhost .1.3.6.1.2.1.25.1.8.1
HOST-RESOURCES-MIB::hrSystem.8.1 = No Such Instance currently exists at this OID
user@raspberrypi:/usr/local/bin$ echo "get .1.3.6.1.2.1.25.1.8.1" | /usr/local/bin/test_7
.1.3.6.1.2.1.25.1.8.1
string
test_7

подскажите пожалуйста в чем может быть проблема?



Последнее исправление: unnnder (всего исправлений: 2)