问题:
我有一台运行第三方 ERP 系统的 Windows 2008 R2 VM。他们有一个实用程序,可以运行计划作业,以每周 7 天为周期每晚备份 Oracle 数据库及其应用数据。
问题是它必须在会话中以桌面应用程序的形式交互运行。它不能作为服务运行。虽然我不太喜欢让账户保持登录状态,但我已经学会了允许它。这里的主要问题是,如果服务器重新启动,我可能要过几天才能意识到账户不再以打开应用程序的状态登录到服务器。
问题:
我是否可以(如果可以,如何)创建一个在启动时运行的任务,将用户登录到虚拟机(创建一个会话)并在该会话的桌面上启动一个应用程序?
或者
如果这太难或不可能,有人知道如何检查并查看此应用程序是否在该帐户的会话中运行,如果没有,则发送警报吗?我甚至可以接受自定义事件日志错误,因为我可以通过远程监控发现它。
答案1
我假设该程序需要显示其 UI,并且您不能以非交互方式运行它。(我喜欢这些软件“珍品”……)
就我个人而言,我会这样做:
配置服务器计算机
AutoAdminLogon
以您想要运行应用程序的用户身份登录。这将导致服务器的控制台在启动时自动以此用户身份登录。将一个脚本添加到自动登录用户的个人“启动”组,该脚本异步启动任务,监视进程列表中是否存在任务(我
WMIC PROCESS LIST
个人会使用),如果任务从进程列表中消失,则发出警报,如果需要,则重新启动进程。我还会锁定工作站。
启动组中的脚本可以简单到(调用您必须运行的程序eqalert.exe
):
@echo off
:restart
start "" "C:\Program Files\EQFU\EQWin32\eqalert.exe"
:check_loop
rem Delay 30 seconds between checks
ping -n 30 127.0.0.1 >NUL 2>NUL
wmic process list | find /i "eqalert.exe" >NUL 2>NUL
if not errorlevel 1 goto check_loop
echo eqalert.exe not running - restarting
eventcreate /T ERROR /ID 1 /L APPLICATION /D "eqalert.exe not running - restarting"
goto restart
此脚本假定只有一个任务实例在运行,并且仅检查任务是否在进程列表中。如果进程挂起或以其他方式终止,此脚本将无法捕获该进程。(监控程序是否“响应”Windows——即其消息泵是否仍在——呃——泵送——是一个更复杂的前景。)
答案2
首先,你确定你真的需要一个交互式会话吗?如果设置了属性,你实际上可以在计划任务中运行它。
现在,假设上述情况是不可能的/不切实际的/不允许的:
您可以设置虚拟机以自动登录用户。该过程如下所述这里但重点如下:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
在注册表中打开- 创建两个注册表项 DefaultUserName
and
Defaultpassword` - 编辑
AutoAdminLogon
条目并将其设置为1
(或者,您也可以直接下载并使用自动登录)
我相信您能看到这里的潜在问题,所以我就不再详细说明了。
您的第二个请求很容易通过批处理完成。以下是使用布拉特:
tasklist | find "myprocess.exe"
if %ERRORLEVEL%==1 blat tasknotrunning.txt -to [email protected]
如果您想使用事件日志,那么您可以使用内置的事件创建命令如下:
tasklist | find "myprocess.exe"
if %ERRORLEVEL%==1 eventcreate.exe /L APPLICATION /ID 911 /D “task XXX is not running” /T INFORMATION
(我在这里选择 911 作为事件 ID,但您可以使用任何您认为合适的,只要它不与其他内容冲突)。
答案3
他们有一个实用程序,可以运行计划的作业来备份 Oracle 数据库及其应用程序数据
如果任务仅此而已,还有其他方法可以备份 Oracle 数据库。您还提到了其他应用程序数据,但我希望这些数据也可以单独捕获。您是否研究过您可能已经用于其他服务的更通用的备份工具(例如 BackUp Exec、Barracuda、Acronis 等)是否可以实现相同的目标?听起来这个工具是为可能没有真正备份解决方案的较小客户设计的。