UNIXサーバ作業の自動化として、特定のプロセスをKILLするマクロを書きました。
前提として
・停止対象のプロセスはJavaの常駐JOBが3つ
・プロセス停止前にチェック処理が必要
このチェック処理が複雑なので、マクロにしました。
下記は、サーバにログオンされた状態以降の抜粋です。チェック処理と最後のログオフは省略してます。
実際のツールはHTAで作業メニュー画面があり、画面操作でマクロを起動する構成にしました。
macro
Visual Basic
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
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 |