LoginSignup
0
0

【csh】キックシェルの作成

Last updated at Posted at 2024-06-12

前回の記事:【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】個別シェルの作成

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0