機能
- スクリプトと同じパスにある設定ファイルを読み取る。
- 設定ファイルは引数で上書き可能
- 設定ファイル内に定義された動作可能なHostでのみ実行可能
- 日付が変わったら前日のログファイルは日付きのファイルに退避
- 同じユーザーが引数も含めて同じスクリプトの複数起動を防止
- ログには日時を追加して記載
#! /bin/sh set -e # Terminate at error set -u # Error if undefined variable # System Variables BASE_DIR=`dirname $0` BASE_DIR=`cd ${BASE_DIR} && pwd` # Change to full path BASENAME=`basename $0 | sed -e "s/\.[^.]*$//"` #Except extension HOST=`hostname | cut -d"." -f 1` USER=`whoami` TODAY=`date +%Y%m%d` # echo with time stamp in front. log() { NOW=`date +%Y\/%m/%d\ %H:%M:%S` echo "$*" | sed -e "s|^|[${NOW}] |" } log "Start!" # User Variables CONFIG="${BASE_DIR}/${BASENAME}_${HOST}_${USER}.config" if [ $# -eq 1 ]; then CONFIG="$1" fi if [ ! -f "${CONFIG}" ]; then echo "${CONFIG} not found" echo "" exit 1 fi . "${CONFIG}" # Log file LOGDATE="${TODAY}" if [ -f "${LOG}" ]; then LOGDATE=`perl -MPOSIX -le 'print strftime "%Y%m%d", localtime((lstat)[9]) for @ARGV' $LOG` LOGDATE=`echo ${LOGDATE} | cut -d" " -f 1` fi if [ "${LOGDATE}" -lt "${TODAY}" ]; then echo "move log file from ${LOG} to ${LOG}.${LOGDATE}" | tee -a "${LOG}" mv "${LOG}" "${LOG}.${LOGDATE}" fi log "Config file:${CONFIG}" | tee -a "${LOG}" NOW=`date +%Y\/%m/%d\ %H:%M:%S` cat "${CONFIG}" | sed -e "s|^|[${NOW}] Config=|" | tee -a "${LOG}" # Verify host if [ `echo ${HOSTS} | grep ${HOST} | wc -l ` -eq 0 ]; then log "Not allowed on this host." | tee -a "${LOG}" exit 1 fi # Prevent multiple instance GREP_PS="$0 $*" if [ $# -eq 0 ]; then GREP_PS="$0" fi PROCESSES=`ps -o pgid,pid,tty,time,command | grep "${GREP_PS}" | awk '$1==$2' | wc -l` log "No. of proceeses ${PROCESSES}" | tee -a "${LOG}" if [ ${PROCESSES} -gt 1 ]; then log "Already running this script" | tee -a "${LOG}" ps -o pgid,pid,tty,time,command | grep "${GREP_PS}" | awk '$1==$2' | tee -a "${LOG}" log "Abort!" | tee -a "${LOG}" log "" | tee -a "${LOG}" exit 1 fi #do something log "Complete!" | tee -a "${LOG}" log "" | tee -a "${LOG}"
定義ファイル デフォルトはスクリプト名.config
#! /bin/sh LOG_DIR=${BASE_DIR} LOG=${LOG_DIR}/${BASENAME}.log HOSTS="allow_host1 allow_host2"
0 件のコメント:
コメントを投稿