onshutdown.bat 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. @ECHO OFF
  2. REM *************************************************************************
  3. REM
  4. REM Licensed Materials - Property of IBM and/or HCL
  5. REM
  6. REM IBM Informix Dynamic Server
  7. REM (c) Copyright IBM Corporation 2009 All rights reserved.
  8. REM (c) Copyright HCL Technologies Ltd. 2017. All Rights Reserved.
  9. REM
  10. REM *************************************************************************
  11. REM
  12. REM Name : onshutdown.bat
  13. REM Description : Batch file to ensure IDS is shutdown
  14. REM
  15. REM *************************************************************************
  16. SET PROG=%0
  17. SET TIMEOUT=%1
  18. SET FAILURE=1
  19. SET SUCCESS=0
  20. SET DEFAULTTIMEOUT=30
  21. SET MINTIMEOUT=10
  22. SET MAXTIMEOUT=60
  23. :StartScript
  24. ECHO Started %PROG%
  25. SET HAVEERROR=0
  26. REM Check if Command Extensions can be enabled
  27. VERIFY errors 2>NUL
  28. SETLOCAL EnableExtensions
  29. IF ERRORLEVEL 1 GOTO ErrCmdExtensions
  30. REM Check if the following programs exist
  31. REM - TaskList.exe
  32. REM - TaskKill.exe
  33. REM - PING.exe
  34. REM - START.exe
  35. TASKLIST /? >NUL 2>NUL
  36. IF ERRORLEVEL 1 GOTO ErrTaskList
  37. TASKKILL /? >NUL 2>NUL
  38. IF ERRORLEVEL 1 GOTO ErrTaskKill
  39. PING /? >NUL 2>NUL
  40. IF ERRORLEVEL 1 GOTO ErrPING
  41. START /? >NUL 2>NUL
  42. IF ERRORLEVEL 1 GOTO ErrSTART
  43. REM Check if required IDS environment variables are set
  44. IF NOT DEFINED INFORMIXDIR GOTO ErrMissingIDSEnvVar
  45. IF NOT DEFINED INFORMIXSERVER GOTO ErrMissingIDSEnvVar
  46. IF NOT DEFINED ONCONFIG GOTO ErrMissingIDSEnvVar
  47. REM Has the user specified more arguments than required?
  48. IF NOT X%2 == X GOTO PrintUsage
  49. REM Check and set the timeout value
  50. IF X%TIMEOUT% == X (
  51. ECHO Setting default timeout to %DEFAULTTIMEOUT% seconds.
  52. SET TIMEOUT=%DEFAULTTIMEOUT%
  53. GOTO PrintWarning
  54. )
  55. IF %TIMEOUT% LSS %MINTIMEOUT% GOTO PrintUsage
  56. IF %TIMEOUT% GTR %MAXTIMEOUT% GOTO PrintUsage
  57. :PrintWarning
  58. ECHO.
  59. ECHO ********************************************************
  60. ECHO !!! WARNING !!!
  61. ECHO.
  62. ECHO THE onshutdown SCRIPT WILL TRY TO SHUTDOWN AND TERMINATE
  63. ECHO THIS IDS INSTANCE %INFORMIXSERVER% UNCONDITIONALLY!
  64. ECHO ********************************************************
  65. ECHO.
  66. GOTO IDSShutdown
  67. :IDSShutdown
  68. SET ONMODECMD=%INFORMIXDIR%\bin\onmode.exe -ky
  69. SET ONCLEANCMD=%INFORMIXDIR%\bin\onclean.exe -ky
  70. SET ONSTATCMD=%INFORMIXDIR%\bin\onstat.exe -
  71. REM Give the DBA a FINAL chance to abort this script
  72. ECHO Hit Ctrl-C if you wish to abort this operation!
  73. ECHO Waiting for 10 seconds before continuing...
  74. PING -n 10 localhost >NUL 2>NUL
  75. ECHO Attempting to shutdown %INFORMIXSERVER% in %TIMEOUT% seconds...
  76. REM Run %INFORMIXDIR%\bin\onmode -ky in the background and get its ProcessID
  77. START /B %ONMODECMD%
  78. SET ONMODEPID=0
  79. FOR /F "tokens=2" %%I IN ('TaskList /NH /FI "IMAGENAME eq onmode.exe" 2^>NUL') DO SET ONMODEPID=%%I
  80. IF X%ONMODEPID% == X0 (
  81. ECHO Finished executing %INFORMIXDIR%\bin\onmode.exe
  82. SET HAVEERROR=0
  83. GOTO EndScript
  84. )
  85. SET TIMEWAITED=0
  86. SET TIMEINCR=5
  87. :Loop_WaitForOnmode
  88. SET TEMP_ONMODEPID=0
  89. FOR /F "tokens=2" %%I IN ('TaskList /NH /FI "IMAGENAME eq onmode.exe" 2^>NUL') DO SET TEMP_ONMODEPID=%%I
  90. IF X%TEMP_ONMODEPID% == X0 (
  91. ECHO Finished executing %INFORMIXDIR%\bin\onmode.exe
  92. SET HAVEERROR=0
  93. GOTO EndScript
  94. )
  95. PING -n %TIMEINCR% localhost >NUL 2>NUL
  96. SET /A TIMEWAITED=%TIMEWAITED%+%TIMEINCR%
  97. IF %TIMEWAITED% GEQ %TIMEOUT% (
  98. GOTO TimeoutExpired
  99. ) ELSE (
  100. GOTO Loop_WaitForOnmode
  101. )
  102. :TimeoutExpired
  103. REM Kill the onmode process if its still running
  104. ECHO %INFORMIXDIR%\bin\onmode timed out!
  105. TaskKill /F /FI "IMAGENAME eq onmode.exe" /PID %ONMODEPID% >NUL 2>NUL
  106. GOTO InvokeOnclean
  107. :InvokeOnclean
  108. ECHO Attempting to cleanup this instance forcefully...
  109. %ONCLEANCMD%
  110. IF ERRORLEVEL 0 (
  111. ECHO Finished executing %INFORMIXDIR%\bin\onclean.exe
  112. SET HAVEERROR=0
  113. )
  114. GOTO EndScript
  115. :ErrCmdExtensions
  116. ECHO ERROR: Cannot enable Command Extensions.
  117. SET HAVEERROR=1
  118. GOTO EndScript
  119. :ErrTaskList
  120. ECHO ERROR: Cannot find TaskList.exe.
  121. SET HAVEERROR=1
  122. GOTO EndScript
  123. :ErrTaskKill
  124. ECHO ERROR: Cannot find TaskKill.exe.
  125. SET HAVEERROR=1
  126. GOTO EndScript
  127. :ErrPING
  128. ECHO ERROR: Cannot find PING.exe.
  129. SET HAVEERROR=1
  130. GOTO EndScript
  131. :ErrSTART
  132. ECHO Error: Missing START.exe
  133. SET HAVEERROR=1
  134. GOTO EndScript
  135. :ErrMissingIDSEnvVar
  136. ECHO ERROR: Please set INFORMIXDIR, INFORMIXSERVER and ONCONFIG.
  137. SET HAVEERROR=1
  138. GOTO EndScript
  139. :PrintUsage
  140. ECHO.
  141. ECHO Usage:
  142. ECHO onshutdown [timeout]
  143. ECHO timeout: Time in seconds onshutdown should
  144. ECHO wait for onmode -ky to complete
  145. ECHO Default = 30 secs
  146. ECHO Minimum = 10 secs
  147. ECHO Maximum = 60 secs
  148. ECHO.
  149. SET HAVEERROR=1
  150. GOTO EndScript
  151. :EndScript
  152. ECHO Finished %PROG%
  153. GOTO Done
  154. :Done
  155. REM Done
  156. IF %HAVEERROR% == 1 (
  157. EXIT /B %FAILURE%
  158. ) ELSE (
  159. EXIT /B %SUCCESS%
  160. )