前回の記事:【csh】キックシェルの概要
キックシェルの作成時に必要なスクリプトは、キックシェルとキックシェルのenvファイルになります。
1.envファイルの作成
まずは、envファイルから作成していきます。
以下の通り、etcディレクトリにtouchし、nanoエディタで編集する。
※フォルダ構成についてはUbuntuでcshを起動するための実行環境を整備する。を参照
adm/adm[52]: pwd
/home/yuya/csh_project/batch/etc
adm/adm[53]: touch batch_envset.csh
adm/adm[54]: ls -l
合計 0
-rw-rw-r-- 1 yuya yuya 0 6月 7 15:47 batch_envset.csh
adm/adm[55]: adm/adm[55]: nano batch_envset.csh
以下の通り、envファイルのスクリプトを記載する。
batch_envset.csh
#!/bin/csh -f
setenv BEANS_BATCH /home/yuya/csh_project/batch
# バッチ共通環境変数
setenv RCV_FILE_DIR $[BEANS_BATCH]/out/rcv
setenv SND_FILE_DIR $[BEANS_BATCH]/out/snd
setenv BATCH_LOG $[BEANS_BATCH]/out/log
setenv BATCH_TMP $[BEANS_BATCH]/out/tmp
setenv APP_ENV $[BEANS_BATCH]/etc
setenv APP_EXE $[BEANS_BATCH]/bin
# DB共通環境変数
setenv DB_HOST "mydatabase"
setenv DB_USER "root"
setenv DB_PW "root"
# 共通シェル変数
set DATE = "/usr/bin/date"
set CAT = "/bin/cat"
set RM = "/bin/rm"
set MV = "/bin/mv"
set DEV_NULL = "/dev/null"
set EXPR = "/usr/bin/expr"
set CP = "/bin/cp"
set COMPRESS = "/bin/gzip" # gzipを使用する場合
set LS = "/bin/ls"
set WC = "/usr/bin/wc"
set AWK = "/usr/bin/awk"
set HEAD = "/usr/bin/head"
set CUT = "/usr/bin/cut"
set XARGS = "/usr/bin/xargs"
set CD = "/usr/bin/cd"
set TAR = "/bin/tar"
set MT = "/bin/mt"
# SQL*Plus
set SQLPLUS = "/opt/oracle/instantclient_12_2/sqlplus"
# SQL*Loader
set SQLLDR = "/opt/oracle/instantclient_12_2/sqlldr"
※SQLPlus、SQLLoaderのインストールについては、以下の記事を参照
記事:【csh】SQL*Plus・Loaderのインストール
2.キックシェルの作成
キックシェルでやりたいことは、以下の通り
・「1.」で作成したenvファイルを読み込み
・初期処理(変数の準備やログの出力先を指定)
・ログファイルの設定
・起動シェルの環境設定
・日付の取得
・アプリの実行
・実行結果を統合監視(JP1)に出力
実際の処理は以下の通り。
app_batch.csh
#!/bin/csh -f
#---------------------------------------------------------------------------------------------------
#
#システム名称 :
#プログラムID :
#プログラム名 :
#処理概要 :
#
#入力 :
#出力 :
#バーション :
#作成者 :
#作成日 :
#===================================================================================================
#更新履歴
#---------------------------------------------------------------------------------------------------
#バージョン :
#修正日付 :
#修正者 :
#修正内容 :
#--------------------------------------------------------------------------------------------------
# Parameters
#---------------------------------------------------------------------------------------------------
# Exit code
# 0 : 正常終了
# 1 : 異常終了
#---------------------------------------------------------------------------------------------------
###--- Set Enviroment
source /home/yuya/csh_project/batch/etc/batch_envset.csh
set system_date = `date +'%y%m%d'`
set my_procid = $$
set this_shell_tmp = $0
set this_shell = ${this_shell_tmp:t}
set job_name = ${this_shell:r}
set shell_log = ${BATCH_LOG}/${this_shell:r}_${my_procid}.log
set log_file = ${shell_log}
echo "INFO:${job_name}: Shell Check Start Time = `date +'%Y-%m-%d %H:%M:%S'`" >& ${shell_log}
#Check Argument Numbers
switch ( $#argv )
case 2:
echo "Shell = $0" >>& ${shell_log}
echo "pram1 = $1" >>& ${shell_log}
echo "pram1 = $2" >>& ${shell_log}
breaksw
default:
echo "ERR:${job_name} 引数は2つ" >>& ${shell_log}
set ret_code = 2
goto exit_point
endsw
set job_name = $1
set exe_name = $2
###
# Job log file の設定 & Shell log の移動
#
set log_file = ${BATCH_LOG}/${job_name}_${my_procid}.log
echo "INFO:${this_shell:r}: Job log file = ${log_file}" >>& ${shell_log}
echo "INFO:${this_shell:r}: Shell Check End Time = `date +'%Y-%m-%d %H:%M:%S'`" >>& ${shell_log}
echo "" >>& ${log_file}
echo "*** ${job_name}: JOB Start Time = `date +'%Y-%m-%d %H:%M:%S'`" >>& ${log_file}
echo "" >>& ${log_file}
cat ${shell_log} >>& ${log_file}
if ( ${status} == 0 ) then
\rm -f ${log_file} >& /dev/null
else
echo "ERR:${job_name} ログファイルがオープンできません( ${log_file} )" >>& ${shell_log}
set ret_code = 4
goto exit_point
endif
###
# 個別JOB環境の設定
#
set app_env_file = ${BEANS_BATCH}/etc/${job_name}.env
if ( ! -r ${app_env_file} ) then
echo "ERR:${job_name} app.envファイル( ${app_env_file} )が存在しません" >>& ${log_file}
set ret_code = 5
goto exit_point
endif
source ${app_env_file}
###
# Batch日付の取得
#
set batch_date = `${BEANS_BATCH}/bin/GetBatchDate`
if ( ${status} != 0 ) then
echo "ERR:Batch日付の取得に失敗しました" >>& ${log_file}
set ret_code = 99
goto exit_point
endif
setenv UNYOYMD ${batch_date}
echo "INFO: バッチ日付 = ${UNYOYMD}" >>& ${log_file}
###
# アプリ実行
#
set app_exec = ${BEANS_BATCH}/script/$exec_name
if ( -x ${app_exec} ) then
echo "\nExecuting application ...\n" >>& ${log_file}
${app_exec} >>& ${log_file}
set app_ret = ${status}
echo "\nDone.\n" >>& ${log_file}
else
echo "実行ファイルがありません ( ${app_exec} )" >>& ${log_file}
set ret_code = 6
goto exit_point
endif
switch ( ${app_ret} )
case 0:
set ret_code = 0
breaksw
default:
echo "ERR:${job_name}: アプリが異常終了しました" >>& ${log_file}
set ret_code = 99
endsw
###
# Job End
#
exit_point:
###
# 統合監視メッセージ
#
switch ( ${ret_code} )
case 0:
set unyo_msg_code = "ABC0000I"
set unyo_msg = "${job_name} Normal End"
breaksw
default:
set unyo_msg_code = "ABC0001E"
set unyo_msg = "${job_name} Abnormal End APP ABEND"
breaksw
endsw
echo "UNYO_MSG = ${unyo_msg_code} ${unyo_msg}" >>& ${log_file}
echo "JOB_EXIT_CODE = ${ret_code}" >>& ${log_file}
echo "*** ${job_name}: JOB End Time = `date +'%Y-%m-%d %H:%M:%S'`" >>& ${log_file}
exit ${ret_code}
まとめ
アプリ起動はShellだけではないため、キックシェルは言語によって使い分ける。
次回は個別シェル(子シェル)を作成してキックシェルで起動してみる。
次回記事:【csh】個別シェルの作成