71 lines
1.5 KiB
Bash
Executable File
71 lines
1.5 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# Settings
|
|
CSV_URL="https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv"
|
|
|
|
# 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"
|
|
|
|
# Logging
|
|
CURRENT_MONTH=$(date "+%Yw%U%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
|
|
}
|
|
|
|
# Acquire the lock or exit
|
|
LOCK_DIR="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
|
|
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 }' >$CSV_FILE
|
|
log "Changed"
|
|
else
|
|
log "No Change"
|
|
rm $TMP_CSV_FILE
|
|
fi
|
|
|
|
# Release the lock
|
|
rmdir "$LOCK_DIR"
|
|
|
|
# Exit
|
|
exit $EXIT_SUCCESS
|