こんにちは! JP1の管理サーバー(マネージャー)をLinux環境で運用しているインフラエンジニアのみなさん向けに、カレンダー一括メンテナンスの強力なシェルスクリプトをお届けします。
「今週の祝日は出勤日(稼働日)にしたい。でも、来週のシステムメンテ日は全グループを一斉に停止(非稼働日)にしたい……」
そんな複雑なスケジュール要件も、今回作成した「3カラム対応版のシェルスクリプト」を使えば、1つのCSVファイルに設定を並べるだけで一括制御が可能になります!
もちろん、WindowsのExcelから保存したCSVをそのままLinuxに転送した際に発生する「行末の文字化けエラー(改行コード \r 問題)」の自動クレンジング機能もバッチリ組み込んであります。
1. 準備するCSVファイル(calendar_list.csv)
スクリプトと同じディレクトリに配置するCSVファイルです。構成は「ジョブグループパス , 日付(YYYY/MM/DD) , オプション(-opまたは-cl)」となります。
➔ calendar_list.csv の記述例
コード スニペット
# ジョブグループカレンダーパス,対象日付,操作オプション
/DefaultScheduler/GroupA/SubGroup1,2026/08/11,-op
/DefaultScheduler/GroupA/SubGroup2,2026/08/11,-op
/DefaultScheduler/GroupB,2026/12/30,-cl
/DefaultScheduler/GroupB,2026/12/31,-cl
2. 3カラム対応版シェルスクリプトのコード
以下のコードを add_calendar_flex.sh などの名前で保存し、実行権限(chmod +x add_calendar_flex.sh)を付与して実行してください。
Bash
#!/bin/bash
# ====================================================================
# JP1/AJS3 カレンダー一括更新スクリプト (Linux / 3カラム動的対応版)
# ====================================================================
# --- [設定エリア] ---------------------------------------------------
# 読み込むCSVファイルのパス
CSV_FILE="calendar_list.csv"
# JP1の「ajscalendar」コマンドのパス
AJSCAL_CMD="/opt/jp1ajs2/bin/ajscalendar"
# --------------------------------------------------------------------
echo "[INFO] カレンダー日付の一括更新処理を開始します..."
echo "--------------------------------------------------"
# コマンドの存在チェック
if [ ! -x "$AJSCAL_CMD" ]; then
echo "[ERROR] ajscalendar コマンドが見つからないか、実行権限がありません: $AJSCAL_CMD"
exit 1
fi
# CSVファイルの存在チェック
if [ ! -f "$CSV_FILE" ]; then
echo "[ERROR] 設定されたCSVファイルが見つかりません: $CSV_FILE"
exit 1
fi
# CSVファイルを1行ずつ読み込んで処理
# ※Windows環境で作成されたCSV(改行コードCRLF)対策として tr コマンドで \r を削除しています
tr -d '\r' < "$CSV_FILE" | while IFS=, read -r group_path target_date op_type extra
do
# 空行、または先頭が「#」のコメント行をスキップ
[[ -z "$group_path" || "$group_path" =~ ^# ]] && continue
# スペース等の余分な文字をトリミング
op_type=$(echo "$op_type" | tr -d ' ')
# ログ表示用の切り替え
txt_type="不明"
if [ "$op_type" = "-op" ]; then txt_type="稼働日追加"; fi
if [ "$op_type" = "-cl" ]; then txt_type="非稼働日追加"; fi
echo "[EXEC] グループ: ${group_path} に ${txt_type}: ${target_date} を実行中..."
# 🔽 第3引数($op_type)に指定された -op / -cl を動的に適用して実行
"$AJSCAL_CMD" "$op_type" "$target_date" "$group_path" > /dev/null 2>&1
# 実行結果の判定
if [ $? -eq 0 ]; then
echo " -> [SUCCESS] 正常に処理されました。"
else
echo " -> [FAILED] 処理に失敗しました。戻り値を確認してください。"
fi
echo "--------------------------------------------------"
done
echo "[INFO] すべての処理が終了しました。"
exit 0
3. Linux運用での導入メリット
このスクリプトを導入することで、スケジュール変更の「自動化」だけでなく「作業の見える化」が実現します。
これまでは「このグループにはこのコマンドを叩いて……」とテキストにコマンドを書き並べていた作業が、「設定シート(CSV)を1枚書き直してスクリプトを叩くだけ」に変わります。万が一、設定後に「やっぱり元に戻したい」となった場合も、CSVの3列目を -op から -cl(あるいはその逆)に一括置換してもう一度実行するだけで元通りにリカバリできるため、格段に運用の安全性が向上します。
ぜひ、次回の定期カレンダーメンテナンスからこの3カラム版スクリプトを活用してみてください!
