@ECHO OFF REM ************************************************************************* REM REM Licensed Materials - Property of IBM and/or HCL REM REM IBM Informix Dynamic Server REM (c) Copyright IBM Corporation 2009 All rights reserved. REM (c) Copyright HCL Technologies Ltd. 2017. All Rights Reserved. REM REM ************************************************************************* REM REM Name : onshutdown.bat REM Description : Batch file to ensure IDS is shutdown REM REM ************************************************************************* SET PROG=%0 SET TIMEOUT=%1 SET FAILURE=1 SET SUCCESS=0 SET DEFAULTTIMEOUT=30 SET MINTIMEOUT=10 SET MAXTIMEOUT=60 :StartScript ECHO Started %PROG% SET HAVEERROR=0 REM Check if Command Extensions can be enabled VERIFY errors 2>NUL SETLOCAL EnableExtensions IF ERRORLEVEL 1 GOTO ErrCmdExtensions REM Check if the following programs exist REM - TaskList.exe REM - TaskKill.exe REM - PING.exe REM - START.exe TASKLIST /? >NUL 2>NUL IF ERRORLEVEL 1 GOTO ErrTaskList TASKKILL /? >NUL 2>NUL IF ERRORLEVEL 1 GOTO ErrTaskKill PING /? >NUL 2>NUL IF ERRORLEVEL 1 GOTO ErrPING START /? >NUL 2>NUL IF ERRORLEVEL 1 GOTO ErrSTART REM Check if required IDS environment variables are set IF NOT DEFINED INFORMIXDIR GOTO ErrMissingIDSEnvVar IF NOT DEFINED INFORMIXSERVER GOTO ErrMissingIDSEnvVar IF NOT DEFINED ONCONFIG GOTO ErrMissingIDSEnvVar REM Has the user specified more arguments than required? IF NOT X%2 == X GOTO PrintUsage REM Check and set the timeout value IF X%TIMEOUT% == X ( ECHO Setting default timeout to %DEFAULTTIMEOUT% seconds. SET TIMEOUT=%DEFAULTTIMEOUT% GOTO PrintWarning ) IF %TIMEOUT% LSS %MINTIMEOUT% GOTO PrintUsage IF %TIMEOUT% GTR %MAXTIMEOUT% GOTO PrintUsage :PrintWarning ECHO. ECHO ******************************************************** ECHO !!! WARNING !!! ECHO. ECHO THE onshutdown SCRIPT WILL TRY TO SHUTDOWN AND TERMINATE ECHO THIS IDS INSTANCE %INFORMIXSERVER% UNCONDITIONALLY! ECHO ******************************************************** ECHO. GOTO IDSShutdown :IDSShutdown SET ONMODECMD=%INFORMIXDIR%\bin\onmode.exe -ky SET ONCLEANCMD=%INFORMIXDIR%\bin\onclean.exe -ky SET ONSTATCMD=%INFORMIXDIR%\bin\onstat.exe - REM Give the DBA a FINAL chance to abort this script ECHO Hit Ctrl-C if you wish to abort this operation! ECHO Waiting for 10 seconds before continuing... PING -n 10 localhost >NUL 2>NUL ECHO Attempting to shutdown %INFORMIXSERVER% in %TIMEOUT% seconds... REM Run %INFORMIXDIR%\bin\onmode -ky in the background and get its ProcessID START /B %ONMODECMD% SET ONMODEPID=0 FOR /F "tokens=2" %%I IN ('TaskList /NH /FI "IMAGENAME eq onmode.exe" 2^>NUL') DO SET ONMODEPID=%%I IF X%ONMODEPID% == X0 ( ECHO Finished executing %INFORMIXDIR%\bin\onmode.exe SET HAVEERROR=0 GOTO EndScript ) SET TIMEWAITED=0 SET TIMEINCR=5 :Loop_WaitForOnmode SET TEMP_ONMODEPID=0 FOR /F "tokens=2" %%I IN ('TaskList /NH /FI "IMAGENAME eq onmode.exe" 2^>NUL') DO SET TEMP_ONMODEPID=%%I IF X%TEMP_ONMODEPID% == X0 ( ECHO Finished executing %INFORMIXDIR%\bin\onmode.exe SET HAVEERROR=0 GOTO EndScript ) PING -n %TIMEINCR% localhost >NUL 2>NUL SET /A TIMEWAITED=%TIMEWAITED%+%TIMEINCR% IF %TIMEWAITED% GEQ %TIMEOUT% ( GOTO TimeoutExpired ) ELSE ( GOTO Loop_WaitForOnmode ) :TimeoutExpired REM Kill the onmode process if its still running ECHO %INFORMIXDIR%\bin\onmode timed out! TaskKill /F /FI "IMAGENAME eq onmode.exe" /PID %ONMODEPID% >NUL 2>NUL GOTO InvokeOnclean :InvokeOnclean ECHO Attempting to cleanup this instance forcefully... %ONCLEANCMD% IF ERRORLEVEL 0 ( ECHO Finished executing %INFORMIXDIR%\bin\onclean.exe SET HAVEERROR=0 ) GOTO EndScript :ErrCmdExtensions ECHO ERROR: Cannot enable Command Extensions. SET HAVEERROR=1 GOTO EndScript :ErrTaskList ECHO ERROR: Cannot find TaskList.exe. SET HAVEERROR=1 GOTO EndScript :ErrTaskKill ECHO ERROR: Cannot find TaskKill.exe. SET HAVEERROR=1 GOTO EndScript :ErrPING ECHO ERROR: Cannot find PING.exe. SET HAVEERROR=1 GOTO EndScript :ErrSTART ECHO Error: Missing START.exe SET HAVEERROR=1 GOTO EndScript :ErrMissingIDSEnvVar ECHO ERROR: Please set INFORMIXDIR, INFORMIXSERVER and ONCONFIG. SET HAVEERROR=1 GOTO EndScript :PrintUsage ECHO. ECHO Usage: ECHO onshutdown [timeout] ECHO timeout: Time in seconds onshutdown should ECHO wait for onmode -ky to complete ECHO Default = 30 secs ECHO Minimum = 10 secs ECHO Maximum = 60 secs ECHO. SET HAVEERROR=1 GOTO EndScript :EndScript ECHO Finished %PROG% GOTO Done :Done REM Done IF %HAVEERROR% == 1 ( EXIT /B %FAILURE% ) ELSE ( EXIT /B %SUCCESS% )