我刚刚开始接触编程,因此我为我的无知道歉。我正在尝试创建一个 .bat 文件来检查服务是否在 XP Pro 上运行。
如果服务正在运行,它将退出 0。如果服务已停止,启动服务等待 10 秒(我猜是通过 ping)检查服务是否正在运行,如果服务正在运行,则退出 0,如果服务已停止,则启动服务等待 10 秒
总共进行 3 次此检查。如果服务在该时间内没有启动:退出 2
退出 0 = 正常 退出 1 = 警告 退出 3 = 严重(并且会发出警报)
我需要为 3 个不同的服务执行此操作,但我认为最好为每个服务创建一个。这样,您就会收到有关未恢复的特定服务的通知。
目标是如果服务停止,它将启动该服务。如果 30 秒后无法启动该服务,它将发送警报。
我尝试使用 .bat 执行此操作的原因是,这与其他所有脚本一致,并且我不想通过添加不同类型的代码使其变得更加复杂。一致性太好了!
我再次为我的无知道歉,我在最后一刻才被投入到这个项目中。
感谢您的帮助和阅读我的问题!
答案1
检查服务是否正在运行实际上是 NSClient++ 的内置功能。如果服务停止,我会使用 NRPE 事件处理程序重新启动服务。基本上,如果服务停止,NRPE 将运行一个脚本。
脚本是
@echo off
net start %1
@exit 0
我在 nsclient.ini 中定义了事件处理程序,例如:
restartwsus=scripts\runcmd.bat wsusservice
在标题下; A list of scripts available to run from the CheckExternalScripts module. Syntax is: <command>=<script> <arguments>
。
(重启 NSClient++)
在 Nagios 服务器上,我在 command.cfg 中将命令定义为:
define command{
command_name restartwsus
command_line /usr/lib/nagios/plugins/check_nrpe -H '$HOSTADDRESS$' -c restartwsus
}
并将服务定义为:
define service{
use generic-service
host_name wsusserver
service_description WSUS
contacts me
notification_options w,c,r
notification_period 24x7
notification_interval 0
check_command check_nt!SERVICESTATE!-d SHOWALL -l WsusService
event_handler restartwsus
}
我希望这能有所帮助。