UNIXサーバ作業の自動化として、特定のプロセスをKILLするマクロを書きました。
前提として
・停止対象のプロセスはJavaの常駐JOBが3つ
・プロセス停止前にチェック処理が必要
このチェック処理が複雑なので、マクロにしました。
下記は、サーバにログオンされた状態以降の抜粋です。チェック処理と最後のログオフは省略してます。
実際のツールはHTAで作業メニュー画面があり、画面操作でマクロを起動する構成にしました。
strdim OUTPUTBUF 500
; KILLする対象のプロセスがPSコマンドで表示される名前
strdim CHK_PROCESS_NAMES 3
CHK_PROCESS_NAMES[0] = 'jp.aaa.bbb.jobA'
CHK_PROCESS_NAMES[1] = 'jp.aaa.bbb.jobB'
CHK_PROCESS_NAMES[2] = 'jp.aaa.bbb.jobC'
; プロセスIDをゲットできたかのフラグ
CHK_PROCESS_RES = 0
timeout = 5
for iii 0 2
CHK_PROCESS_NAME = CHK_PROCESS_NAMES[iii]
;; プロセスID取得subコール
call GET_PROCESSID
if CHK_PROCESS_RES <> 1 then
messagebox '停止対象のプロセスが起動していません。'#13'状態を確認してくだい(OKで次プロセスの停止に進みます)' CHK_PROCESS_NAME
else
strlen CHK_PROCESS_ID
if result = 0 then
messagebox '停止対象のプロセスIDが取得出来ませんでした。'#13'状態を確認してくだい(OKで続行します)' CHK_PROCESS_NAME
else
;; KILL前のチェック処理(省略・・)
;; プロセスKILL
CMD = 'kill -9 '
strconcat CMD CHK_PROCESS_ID
sendln CMD
wait '#' '$'
;; プロセスID取得subコール(Killしたのに残っていたら警告)
call GET_PROCESSID
if CHK_PROCESS_RES <> 2 then
messagebox 'プロセスが停止できていません。'#13'状態を確認してくだい(OKで続行します)' CHK_PROCESS_NAME
endif
endif
endif
next
;;マクロ終了
end
;;; sub プロセス状態確認 start
:GET_PROCESSID
CHK_PROCESS_RES = 2
OUTPUTCNT = 0
flushrecv
setsync 1
CMD = 'ps -ef | grep '
strconcat CMD CHK_PROCESS_NAME
sendln CMD
recvln
while result = 1
recvln
if result = 0 then
break
endif
OUTPUTBUF[OUTPUTCNT] = inputstr
OUTPUTCNT = OUTPUTCNT + 1
endwhile
setsync 0
if OUTPUTCNT > 0 then
;; Javaプロセスか確認(Grepでない)
CHKSTR = '/bin/java'
for i 0 OUTPUTCNT - 1
strscan OUTPUTBUF[i] CHKSTR
if result > 0 then
;; プロセスIDセット
strcopy OUTPUTBUF[i] 10 8 CHK_PROCESS_ID
CHK_PROCESS_RES = 1
break
endif
next
endif
return
;;; sub プロセス状態確認 end