@echo off | |
set PATH= | |
set JAVA_HOME= | |
set PATH= | |
GOTO FUNCTION_END | |
:abort | |
echo aborting: %EXCEPTION% | |
exit /b 1 | |
:default | |
set INSTANCE_NAME=mkebsboot | |
set INSTANCE_HOME=/mnt/tmp | |
set LOG_DIR=/mnt/tmp | |
exit /b 0 | |
:mkebsboot | |
set TMP_DIR=/mnt/tmp | |
exit /b 0 | |
:findPid | |
set FOUND_PID= | |
set _expression=%1 | |
shift | |
set FIND_PROCESS=TASKLIST /FI "WINDOWTITLE eq %_expression%" /NH | |
FOR /F "usebackq tokens=2 delims= " %%A IN (`cmd /c "%FIND_PROCESS% 2>NUL"`) DO ( | |
SET FOUND_PID=%%A | |
) | |
if defined FOUND_PID ( | |
exit /b 0 | |
) else ( | |
set EXCEPTION=%_expression% not found | |
exit /b 1 | |
) | |
:forget | |
SETLOCAL | |
set FOUND_PID= | |
set NEXT_MINUTE= | |
set INSTANCE_NAME=%1 | |
shift | |
set SCRIPT=%1 | |
shift | |
set LOG_DIR=%1 | |
shift | |
CALL :findProcess %INSTANCE_NAME% | |
if defined FOUND_PID ( | |
echo %INSTANCE_NAME% already running pid [%FOUND_PID%] | |
) else ( | |
CALL :nextMinute | |
set _DATE=%DATE:~4% | |
set CMD=schtasks /create /sd %_DATE% /tn %INSTANCE_NAME% /ru System /tr "cmd /c title %INSTANCE_NAME%&%SCRIPT% >%LOG_DIR%\stdout.log 2>%LOG_DIR%\stderr.log" /sc:once /st %NEXT_MINUTE% | |
echo %INSTANCE_NAME% will start at %NEXT_MINUTE% | |
set SECONDS=%TIME:~6,2% | |
set /a SECOND=60-SECONDS | |
%CMD% >NUL | |
ping -n %SECONDS% 127.0.0.1 > NUL 2>&1 | |
CALL :findProcess %INSTANCE_NAME% | |
if not defined FOUND_PID ( | |
set EXCEPTION=%INSTANCE_NAME% did not start | |
abort | |
) | |
) | |
exit /b 0 | |
:FUNCTION_END | |
set PATH=c:\windows\;C:\windows\system32;c:\windows\system32\wbem | |
if not "%1" == "init" if not "%1" == "status" if not "%1" == "stop" if not "%1" == "start" if not "%1" == "tail" if not "%1" == "tailerr" if not "%1" == "run" ( | |
set EXCEPTION=bad argument: %1 not in init status stop start tail tailerr run | |
goto abort | |
) | |
goto CASE_%1 | |
:CASE_init | |
call :default | |
if errorlevel 1 goto abort | |
call :mkebsboot | |
if errorlevel 1 goto abort | |
md %INSTANCE_HOME% | |
del %INSTANCE_HOME%\mkebsboot.cmd 2>NUL | |
echo @echo off>>%INSTANCE_HOME%\mkebsboot.cmd | |
echo title mkebsboot>>%INSTANCE_HOME%\mkebsboot.cmd | |
echo set PATH=c:\windows\;C:\windows\system32;c:\windows\system32\wbem>>%INSTANCE_HOME%\mkebsboot.cmd | |
echo set INSTANCE_NAME=mkebsboot>>%INSTANCE_HOME%\mkebsboot.cmd | |
echo set TMP_DIR=%TMP_DIR%>>%INSTANCE_HOME%\mkebsboot.cmd | |
echo set INSTANCE_NAME=%INSTANCE_NAME%>>%INSTANCE_HOME%\mkebsboot.cmd | |
echo set INSTANCE_HOME=%INSTANCE_HOME%>>%INSTANCE_HOME%\mkebsboot.cmd | |
echo set LOG_DIR=%LOG_DIR%>>%INSTANCE_HOME%\mkebsboot.cmd | |
echo cd /d %%INSTANCE_HOME%%>>%INSTANCE_HOME%\mkebsboot.cmd | |
md %INSTANCE_HOME% | |
del %INSTANCE_HOME%\mkebsboot.cmd 2>NUL | |
echo @echo off>>%INSTANCE_HOME%\mkebsboot.cmd | |
echo title mkebsboot>>%INSTANCE_HOME%\mkebsboot.cmd | |
echo set PATH=c:\windows\;C:\windows\system32;c:\windows\system32\wbem>>%INSTANCE_HOME%\mkebsboot.cmd | |
echo set INSTANCE_NAME=mkebsboot>>%INSTANCE_HOME%\mkebsboot.cmd | |
echo set TMP_DIR=%TMP_DIR%>>%INSTANCE_HOME%\mkebsboot.cmd | |
echo set INSTANCE_NAME=%INSTANCE_NAME%>>%INSTANCE_HOME%\mkebsboot.cmd | |
echo set INSTANCE_HOME=%INSTANCE_HOME%>>%INSTANCE_HOME%\mkebsboot.cmd | |
echo set LOG_DIR=%LOG_DIR%>>%INSTANCE_HOME%\mkebsboot.cmd | |
echo cd /d %%INSTANCE_HOME%%>>%INSTANCE_HOME%\mkebsboot.cmd | |
echo exit /b 0 >>%INSTANCE_HOME%\mkebsboot.cmd | |
GOTO END_SWITCH | |
:CASE_status | |
call :default | |
if errorlevel 1 goto abort | |
call :findPid %INSTANCE_NAME% | |
if errorlevel 1 goto abort | |
echo [%FOUND_PID%] | |
GOTO END_SWITCH | |
:CASE_stop | |
call :default | |
if errorlevel 1 goto abort | |
call :findPid %INSTANCE_NAME% | |
if errorlevel 1 goto abort | |
if defined FOUND_PID ( | |
TASKKILL /F /T /PID %FOUND_PID% >NUL | |
) | |
GOTO END_SWITCH | |
:CASE_start | |
call :default | |
if errorlevel 1 goto abort | |
call :forget %INSTANCE_NAME% %INSTANCE_HOME%\%INSTANCE_NAME%.cmd %LOG_DIR% | |
if errorlevel 1 goto abort | |
GOTO END_SWITCH | |
:CASE_tail | |
call :default | |
if errorlevel 1 goto abort | |
tail %LOG_DIR%\stdout.log | |
GOTO END_SWITCH | |
:CASE_tailerr | |
call :default | |
if errorlevel 1 goto abort | |
tail %LOG_DIR%\stderr.log | |
GOTO END_SWITCH | |
:CASE_run | |
call :default | |
if errorlevel 1 goto abort | |
%INSTANCE_HOME%\%INSTANCE_NAME%.cmd | |
GOTO END_SWITCH | |
:END_SWITCH | |
exit /b 0 |