我们主要经营 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_appname
在commands.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 之类的程序作为真正的监控解决方案。但这本身就是一个全新的问题。