機能
- スクリプトと同じパスにある設定ファイルを読み取る。
- 設定ファイルは引数で上書き可能
- 設定ファイル内に定義された動作可能な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 件のコメント:
コメントを投稿