我如何监视应用程序是否在Windows Server 2008上运行?

我们大多是一家Linux商店,但是我们有一台运行Windows Server 2008的打印服务器,并使用名为Print Helper的应用程序打印发票。 我需要find一种方法来检查这个应用程序是否正在运行,如果没有,就自动重启。

在Linux上,我可能会用一个小的shell脚本和一个cron作业来做这件事,但是我不知道如何在Windows Server上完成这个工作。 我相当有信心,我可以使用Proc :: Background在Perl中完成它,但是我不愿意为一个脚本安装Perl,虽然我确信它可以使用类似PowerShell的东西来完成,但这并不值得利用我的时间来学习一个小任务的PowerShell。 任务列表似乎做了一些我想要的东西,它可以让你知道如果一个特定的进程正在运行或不,但我不知道我怎么可以从那里自动重新启动应用程序,如果它坠毁。

任何帮助感激地收到!

哇。 我只是回答了一个不同的问题。

你应该做的是通过使用sc.exe或srvany.exe (我相信这是贬值)“守护”打印帮助程序进程。 然后,您可以利用内置服务“恢复”选项来处理失败事件(包括,我相信,执行脚本,发送snmp陷阱,发送电子邮件,当然,重新启动服务)。

如下所示:

sc create printhelper binpath= "c:\program files\Print Helper\phelper.exe" start= auto depend= Spooler/lanmanserver DisplayName= "Print Helper"

这将创build一个名为printerhelper的服务,显示名称为“ Print Helper ,自动执行"c:\program files\Print Helper\phelper.exe" ,打印后台处理程序和SMB / CIFS Server服务依赖于NT AUTHORITY\SYSTEM内置用户。

如果你使用的是Nagios,你可以使用NSClient ++插件。

在监控服务器上,定义一个服务:

 define service{ use generic-printer host_name hostname service_description appname check_command check_nt!PROCSTATE!-d SHOWALL -l appname.exe contact_groups admin-sms event_handler autostart_appname!hostname } 

autostart_appnamecommands.cfg定义:

 define command { command_name autostart_appname command_line $USER1$/eventhandlers/autostart_appname.sh $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ } 

事件处理程序脚本autostart_appname.sh

 #!/bin/sh HOSTADDRESS=$4 case "$1" in OK) ;; WARNING) ;; UNKNOWN) ;; CRITICAL) case "$2" in SOFT) ;; HARD) /usr/local/nagios/libexec/check_nrpe -H $HOSTADDRESS -c autostart_appname ;; esac ;; esac exit 0 

在Windows服务器上,在NSC.ini定义一个命令:

 [NRPE Handlers] autostart_appname=C:\Program Files\NSClient++\scripts\autostart_appname.cmd 

批处理脚本就像这样简单:

 net start "Application Name" 

这听起来像你想花尽可能less的时间在这个任务上。 我们都讨厌打印服务器平等。 只使用Windows内置的首选项,您可以创build服务,自动恢复服务,并对服务进行基本的监控。

步骤1创build一个服务

(如果服务控制面板中已经有服务条目,则可以跳过此步骤)

使用sc.exe创build一个新的服务。

 sc.exe create PrintHelper start=auto binPath="C:\<Print Helper Path and Flags>" DisplayName="Print Helper" 

步骤2configuration您的服务

在服务控制面板中,右键单击您的新服务select属性,然后select“恢复”选项卡。 根据需要configuration。

这里有很多选项,第一次失败时怎么办,第二次失败,甚至可以在失败时运行另一个应用程序。

步骤3监视您的服务

将事件查看器configuration为针对Print Helper的特定事件失败发送电子邮件(查找事件右键单击它,selectAttach Task for this event)。

或者将服务configuration为在发生故障时发送电子邮件,使用外部程序作为恢复机制。

放弃

当然我会推荐使用像Nagios或SCOM这样的实际监控解决scheme。 但是这本身就是一个全新的问题。