我有一个运行第三方ERP系统的Windows 2008 R2虚拟机。 他们有一个实用工具,可以运行计划任务,每天晚上轮换备份Oracle数据库及其应用程序数据。
问题是它必须在会话中以交互方式作为桌面应用程序运行。 它不能作为服务运行。 虽然我不是很高兴离开一个帐户login,我已经学会了允许它。 这里的主要问题是,如果服务器重新启动,可能需要几天时间才能意识到该帐户不再在应用程序打开的情况下login到服务器。
可以(如果是这样,如何)我创build一个任务,启动时将用户login到VM(创build会话),并启动该会话的桌面上的应用程序?
要么
如果这太困难或不可能,任何人都有想法如何检查,看看这个应用程序是否在该帐户的会话中运行,如果不发送警报? 即使是自定义的事件日志错误,我也很酷,因为我可以通过远程监控select它。
我假设该程序需要显示其用户界面,并且不能以非交互方式运行。 (我喜欢这些软件的“gem”…)
以下是我个人要做的事情:
使用AutoAdminLogon将服务器计算机configuration为想要运行该应用程序的用户。 这将导致服务器的控制台以该用户在启动时自动login。
添加一个脚本到自动login用户的个人“启动”组,asynchronous启动任务,监视任务存在的进程列表(我会亲自使用WMIC PROCESS LIST ),如果任务从进程列表中丢失,如果需要的话,重新启动该过程。 我也会locking工作站。
启动组中的脚本可能非常简单(调用您必须运行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响应 – 即如果它的消息泵仍然是 – 呃 – 泵 – 是一个更为复杂的前景。)
首先,你确定你确实需要一个互动的会议吗? 如果设置了它的属性,你可以在一个预定的任务内运行它。
现在,假设上述不可能/实际/允许:
你可以设置你的虚拟机来自动login一个用户。 这个过程在这里描述,但这里是高点:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon and Defaultpassword` AutoAdminLogon条目并将其设置为1 (或者,您可以下载并使用AutoLogon )
我相信你可以在这里看到潜在的问题,所以我不会详细说明。
你的第二个请求很容易处理一个批处理。 这是一个使用blat的示例:
tasklist | find "myprocess.exe" if %ERRORLEVEL%==1 blat tasknotrunning.txt -to [email protected]
如果您想要使用事件日志,那么您可以使用内置的eventcreate命令,如下所示:
tasklist | find "myprocess.exe" if %ERRORLEVEL%==1 eventcreate.exe /L APPLICATION /ID 911 /D “task XXX is not running” /T INFORMATION
(我在这里挑选了911作为事件ID,但只要不与别的东西冲突,你可以使用任何你认为合适的事物)。
他们有一个实用程序,将运行计划的作业来备份Oracle数据库及其应用程序数据
如果这是所有的任务,还有其他方法来备份Oracle数据库。 您也提到了其他应用程序数据,但我希望也可以单独获取。 您是否已经考虑过更多一般的备份工具,例如您可能已经用于其他服务的BackUp Exec,Barracuda,Acronis等,是否可以实现相同的目标? 这听起来像是这个工具是针对小型客户,否则可能没有一个真正的备份解决scheme。