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

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

我们主要经营 Linux 商店,但我们有一台运行 Windows Server 2008 的打印服务器,并使用名为 Print Helper 的应用程序打印发票。我需要找到一种方法来检查此应用程序是否正在运行,如果没有运行,则自动重新启动它。

在 Linux 上,我可能会使用一个小的 shell 脚本和一个 cron 作业来执行此操作,但我不确定如何在 Windows Server 上完成此操作。我非常有信心我可以使用 Proc::Background 在 Perl 中完成此操作,但我不愿意只为一个脚本安装 Perl,虽然我确信可以使用 PowerShell 之类的东西来完成,但为了一个小任务而学习 PowerShell 并不值得。Tasklist 似乎可以满足我的一些要求,它可以让您知道特定进程是否正在运行,但我不确定如果应用程序崩溃,我如何从那里自动重新启动应用程序。

任何帮助都感激不尽!

答案1

哇。我刚刚回答了另一个问题。

您应该做的是使用以下命令“守护”打印助手进程执行程序或者服务端(我认为它已被弃用)。然后,您可以利用内置服务“恢复”选项来处理故障事件(我认为包括执行脚本、发送 snmp 陷阱、发送电子邮件,当然还有重新启动服务)。

如上所述:

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

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

答案2

如果您使用 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"

答案3

听起来您想尽可能少地花时间在这项任务上。我们都同样讨厌打印服务器。仅使用 Windows 内置的首选项,您就可以创建服务、自动恢复服务并实现对服务的基本监控。

步骤 1 创建服务

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

使用 sc.exe 创建新服务。

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

第 2 步配置您的服务

在服务控制面板中,右键单击新服务,选择属性,然后选择恢复选项卡。根据需要进行配置。

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

步骤 3 监控您的服务

配置事件查看器以在打印助手的特定事件失败时发送电子邮件(找到事件并右键单击它,选择此事件的附加任务)。

或者将服务配置为在失败时发送电子邮件,使用外部程序作为恢复机制。

免责声明

当然,我建议使用 nagios 或 SCOM 之类的程序作为真正的监控解决方案。但这本身就是一个全新的问题。

相关内容