由Nagios通知执行的脚本不发送邮件

我已经运行了一个新的nagios(服务器3.5.1)系统。 所有的检查工作正常

[1461932408] SERVICE NOTIFICATION: nagiosadmin;appserver;Swapfile;CRITICAL;notify-service-by-email;CHECK_NRPE: Socket timeout after 10 seconds. [1461932418] SERVICE NOTIFICATION: nagiosadmin;adminserver;Disk;CRITICAL;notify-service-by-email;CHECK_NRPE: Socket timeout after 10 seconds. 

我无法使用邮件,因为邮件服务器是交换服务器。 所以我改变了以下命令:

 # 'notify-host-by-email' command definition define command { command_name notify-host-by-email command_line /usr/bin/printf "%b" "Notification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/local/bin/mailsend.rb "***** Nagios Alert*****" } # 'notify-service-by-email' command definition define command { command_name notify-service-by-email command_line /usr/bin/printf "%b" "Notification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/local/bin/mailsend.rb "***** Nagios Alert*****" } 

mailsend.rb是一个ruby脚本,它接受参数并连接到服务器。 如果我直接调用这个参数,所以我收到一封电子邮件。

我的联系人如下所示:

 define contact{ contact_name nagiosadmin ; Short name of user use generic-contact ; Inherit default values from generic-contact template (defined above) alias Nagios Admin ; Full name of user service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,r service_notification_commands notify-service-by-email host_notification_commands notify-host-by-email email [email protected] ; } define contactgroup{ contactgroup_name admins alias Nagios Administrators members nagiosadmin } 

看起来这个命令不会被nagios调用。 脚本有权利755.其他命令,如“触摸文件”也将无法正常工作。

从debugging模式输出:

 [1461935539.111737] [032.2] [pid=8391] ** Notifying contact 'nagiosadmin' [1461935539.111762] [032.2] [pid=8391] Raw notification command: /usr/local/bin/mailsend.rb "***** Nagios Alert*****" "Notification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$" [1461935539.111799] [032.2] [pid=8391] Processed notification command: /usr/local/bin/mailsend.rb "***** Nagios Alert*****" "Notification Type: PROBLEM\nHost: mysqlserver\nState: UP\nAddress: 10.130.1.22\nInfo: PING OK - Packet loss = 0%, RTA = 0.33 ms\n\nDate/Time: Fri Apr 29 15:12:19 CEST 2016" 

更新:

如果我用原来的行代替脚本,我会收到/var/mail

用户nagios可以运行脚本。 我用用户nagioslogin并手动执行命令。

update2(来自评论的附加信息)

ruby脚本使用#!/usr/bin/env ruby ,通过从命令行调用它可以正常工作。 如果我使用默认的/ usr / bin /邮件比我有一个邮件到服务器上的本地用户帐户。 ruby脚本连接到服务器,并发送具有不同邮件凭据的邮件。 这与用户nagios的作品

有人有一个想法?

更新3 🙁 ruby​​脚本发送邮件)

 #!/usr/bin/env ruby require 'net/smtp' require 'logger' require 'rubygems' require 'net-ldap' require '/home/user/lib/ntlm/smtp' logger = Logger.new('/var/log/sendEmail') server = '10.130.1.3' port = 25 # or 25 - double check with your provider username = 'user' password = '****' fromAddress = '[email protected]' toAddress = '[email protected]' subject = ARGV[0] message = ARGV[1] logger.info subject logger.info message message_body = <<END_OF_EMAIL From: Nagios <#{fromAddress}> To: Logs <#{toAddress}> Subject: #{subject} #{message} END_OF_EMAIL smtp = Net::SMTP.new(server, port) smtp.start(server,username,password, :ntlm) smtp.send_message(message_body, fromAddress, toAddress) 

更新4

 nagios@background-server:/usr/local/bin$ whoami nagios nagios@background-server:/usr/local/bin$ ./mailsend.rb nagios@background-server:/usr/local/bin$ nagios@background-server:/usr/local/bin$ ls -la mailsend.rb -rwxr-xr-x 1 nagios nagios 811 May 2 09:05 mailsend.rb 

所以,首先感谢所有帮助我的人。

这不是一个纳吉奥斯问题。

概要:

  1. nagios检查每个服务工作正常的邮件发送
  2. 通过控制台发送邮件(带或不带参数)
  3. 纳吉奥斯开了事件,并处以罚款

这真是令人困惑。 在我的绝望中,我在mailscript中添加了一个全局exception处理程序,将exception的结果写入文件。 在那里我发现了一个错误的条目,只有当这个脚本从nagios执行时才抛出。

该脚本现在没有find所需的文件,因为LOAD_PATH不正确。

解:

所以在要求之前:

 require 'ntlm/smtp' 

我通过手动添加了文件的path:

 $:.unshift File.dirname('/home/application/my_application/current/lib/ntlm') 

现在邮件通过从nagios执行正常工作。