SNMP Traphandle 不工作
SNMP Traphandle not working
这是我第一次使用 SNMP,但在阅读 SNMP pages 之后,我仍然无法在收到陷阱时将简单的 shell 脚本发送到 运行。
我的 /etc/snmp/snmptrapd.conf 文件如下所示:
# Example configuration file for snmptrapd
#
# No traps are handled by default, you must edit this file!
#
disableAuthorization yes
authCommunity log,execute,net public
# the generic traps
traphandle default /usr/local/bin/snmptrapd.sh
snmptrapd.sh 脚本只是说 "hello"。
#!/bin/sh
echo "hello"
脚本可执行,独立执行时 运行s:
> /usr/local/bin/snmptrapd.sh
hello
snmptrapd 运行宁作为后台进程:
> ps -ef | grep snmp
root 29477 1 0 14:49 ? 00:00:00 /usr/sbin/snmptrapd -Lsd -p /var/run/snmptrapd.pid -Cc /etc/snmp/snmptrapd.conf
然而,当我使用 snmptrap 在本地发送陷阱时,没有任何反应:
> snmptrap -v 2c -c public localhost "" NET-SNMP-EXAMPLES-MIB::netSnmpExampleHeartbeatNotification netSnmpExampleHeartbeatRate i 123456
>
现在似乎确实记录了陷阱,因为系统日志文件 (/var/log/messages) 具有以下条目:
Aug 8 15:46:10 <server_name> snmptrapd[29477]: 2017-08-08 15:46:10 localhost
[UDP: [127.0.0.1]:44928->[127.0.0.1]]:#012DISMAN-EVENT-MIB::sysUpTimeInstance =
Timeticks: (1338382434) 154 days, 21:43:44.34#011SNMPv2-MIB::snmpTrapOID.0 =
OID: NET-SNMP-EXAMPLES-MIB::netSnmpExampleHeartbeatNotification#011NET-SNMP-EXAMPLES-MIB::netSnmpExampleHeartbeatRate
= INTEGER: 123456
据我所知,一切都已正确设置。如果是这样,为什么陷阱句柄不起作用,如何检查陷阱不触发脚本的原因?
提前致谢。
编辑:当我将 -Ci 选项添加到 snmptrapd 命令行选项时,出现以下错误:
No log handling enabled - turning on stderr logging
: Unknown Object Identifier (Sub-id not found: (top) -> )
好的,所以在仔细查看之后我找到了答案。
我们看不到输出的原因是因为 snmptrapd 运行 作为守护进程并且不将其标准输出发送到控制台。可以将其替换为
echo "hello" > $HOME/output.txt
并且 'hello' 一词出现在 output.txt 文件中。
另见 http://www.linuxquestions.org/questions/linux-newbie-8/net-snmp-trap-handling-4175420577/
和
https://superuser.com/questions/823435/where-to-log-stdout-and-stderr-of-a-daemon
这是我第一次使用 SNMP,但在阅读 SNMP pages 之后,我仍然无法在收到陷阱时将简单的 shell 脚本发送到 运行。
我的 /etc/snmp/snmptrapd.conf 文件如下所示:
# Example configuration file for snmptrapd
#
# No traps are handled by default, you must edit this file!
#
disableAuthorization yes
authCommunity log,execute,net public
# the generic traps
traphandle default /usr/local/bin/snmptrapd.sh
snmptrapd.sh 脚本只是说 "hello"。
#!/bin/sh
echo "hello"
脚本可执行,独立执行时 运行s:
> /usr/local/bin/snmptrapd.sh
hello
snmptrapd 运行宁作为后台进程:
> ps -ef | grep snmp
root 29477 1 0 14:49 ? 00:00:00 /usr/sbin/snmptrapd -Lsd -p /var/run/snmptrapd.pid -Cc /etc/snmp/snmptrapd.conf
然而,当我使用 snmptrap 在本地发送陷阱时,没有任何反应:
> snmptrap -v 2c -c public localhost "" NET-SNMP-EXAMPLES-MIB::netSnmpExampleHeartbeatNotification netSnmpExampleHeartbeatRate i 123456
>
现在似乎确实记录了陷阱,因为系统日志文件 (/var/log/messages) 具有以下条目:
Aug 8 15:46:10 <server_name> snmptrapd[29477]: 2017-08-08 15:46:10 localhost
[UDP: [127.0.0.1]:44928->[127.0.0.1]]:#012DISMAN-EVENT-MIB::sysUpTimeInstance =
Timeticks: (1338382434) 154 days, 21:43:44.34#011SNMPv2-MIB::snmpTrapOID.0 =
OID: NET-SNMP-EXAMPLES-MIB::netSnmpExampleHeartbeatNotification#011NET-SNMP-EXAMPLES-MIB::netSnmpExampleHeartbeatRate
= INTEGER: 123456
据我所知,一切都已正确设置。如果是这样,为什么陷阱句柄不起作用,如何检查陷阱不触发脚本的原因?
提前致谢。
编辑:当我将 -Ci 选项添加到 snmptrapd 命令行选项时,出现以下错误:
No log handling enabled - turning on stderr logging
: Unknown Object Identifier (Sub-id not found: (top) -> )
好的,所以在仔细查看之后我找到了答案。
我们看不到输出的原因是因为 snmptrapd 运行 作为守护进程并且不将其标准输出发送到控制台。可以将其替换为
echo "hello" > $HOME/output.txt
并且 'hello' 一词出现在 output.txt 文件中。
另见 http://www.linuxquestions.org/questions/linux-newbie-8/net-snmp-trap-handling-4175420577/ 和 https://superuser.com/questions/823435/where-to-log-stdout-and-stderr-of-a-daemon