#!/bin/sh # Settings CSV_URL="https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv" MAIL_TO="$USER" MAIL_FROM="info@holiday.kareha.org" MAIL_SUBJECT="Holiday CSV Updated" MAIL_BODY="Holiday CSV file has been updated." # Constants EXIT_SUCCESS=0 EXIT_FAILURE=1 # Verify the required runtime environment verify_command() { if ! command -v $1 >/dev/null; then echo "This script requires \"$1\" to be installed. Please install it and try again." exit $EXIT_FAILURE fi } verify_command "curl" verify_command "nkf" verify_command "awk" verify_command "mailx" # Logging CURRENT_MONTH=$(date "+%Y-%m%z") SCRIPT_NAME=$(basename $0) LOG_DIR="log" LOG_FILE="$LOG_DIR/$SCRIPT_NAME-$CURRENT_MONTH" get_current_time() { date "+%Y-%m-%d %H:%M:%S%z" } log() { local timestamp=$(get_current_time) local message=$1 echo "$timestamp $message" >>$LOG_FILE } send_mail() { echo "$MAIL_BODY" | mailx -r "$MAIL_FROM" -s "$MAIL_SUBJECT" "$MAIL_TO" if [ $? -ne 0 ]; then log "Failed to send email" fi } # Acquire the lock or exit LOCK_DIR="$SCRIPT_NAME-lock" if ! mkdir "$LOCK_DIR" 2>/dev/null; then echo "Another process is holding the lock. Exiting." exit $EXIT_FAILURE fi mkdir -p $LOG_DIR # Internal configuration settings TMP_CSV_FILE="holidays-jp-tmp.csv" RAW_CSV_FILE="holidays-jp-raw.csv" ALL_CSV_FILE="holidays-jp-all.csv" CSV_FILE="holidays-jp.csv" # Run curl -sS -L -o $TMP_CSV_FILE $CSV_URL if ! diff -q $RAW_CSV_FILE $TMP_CSV_FILE >/dev/null 2>&1; then CACHE_DIR="cache" mkdir -p "$CACHE_DIR" CURRENT_DATETIME=$(date "+%Y-%m-%d_%H:%M:%S%z") cp $TMP_CSV_FILE "$CACHE_DIR/holidays-jp-$CURRENT_DATETIME.csv" mv $TMP_CSV_FILE $RAW_CSV_FILE nkf -w $RAW_CSV_FILE >$ALL_CSV_FILE current_year=$(date +'%Y') tail -n +2 $ALL_CSV_FILE | awk -v cy="$current_year" -F'/' '{ if ($1 >= cy) print }' | tr -d '\r' >$CSV_FILE log "Changed" send_mail ./merge else log "No Change" rm $TMP_CSV_FILE fi # Release the lock rmdir "$LOCK_DIR" # Exit exit $EXIT_SUCCESS