我的应用服务器上运行了6个Java服务和1个Oracle服务。 RAM已满时Oracle服务停止。当Oracle服务停止时,我需要一个批处理文件自动运行。
但是应该连续检查这个批处理文件。但我不知道批处理文件是如何创建的。
Windows Server任务管理器:
答案 0 :(得分:0)
您可以创建一个在事件时触发的任务,但将事件配置为在服务停止时触发并不容易。
另一种观点
您可以设置计划任务以运行批处理脚本以测试服务是否正在运行。如果不是,它将启动它。
@echo off
SetLocal EnableDelayedExpansion
set "user=username"
set "pass=p@ssword"
set "host=server_name"
set "OracleServiceTime=3"
set "OracleServiceTask=CheckOracle"
set "OracleServiceName=the_name_of_the_service"
rem schtasks /query /TN "%OracleServiceTask%" /S "%host%" >NUL 2>&1
schtasks /query /TN "%OracleServiceTask%" >NUL 2>&1
if %ERRORLEVEL% EQU 1 (
rem schtasks /create /SC MINUTE /MO %OracleServiceTime% /TN "%OracleServiceTask%" /RL HIGHEST /TR "%~dpnx0" /S "%host%" /RU "%user%" /RP "%pass%" /F >NUL 2>&1
schtasks /create /SC MINUTE /MO %OracleServiceTime% /TN "%OracleServiceTask%" /RL HIGHEST /TR "%~dpnx0" /F >NUL 2>&1
if !ERRORLEVEL! NEQ 0 (
rem if task couldn't be created, message user or whatever.
)
)
tasklist /FI "imagename eq %OracleServiceName%" | find /I "RUNNING" > NUL 2>&1
if %ERRORLEVEL% EQU 0 goto :EOF
rem sc "\\%host%" start "%OracleServiceName%" > NUL 2>&1
sc start "%OracleServiceName%" > NUL 2>&1
if %ERRORLEVEL% NEQ 0 (
rem if service couldn't be started, message user or whatever.
)
EndLocal
exit/B
此脚本检查任务是否存在,如果不存在则创建它(在这种情况下,每3分钟运行一次)
然后测试服务是否正在运行,如果没有,则启动它。
schtask /create
和sc start
有两个命令行。如果脚本可以在远程系统上运行,则需要host user pass
语法。