【Ask_AI】Linuxで1日以上タイムスタンプ(更新日時)が変更されていないファイルを監視し、メールで通知する設定
※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。スクリプトはAI生成のものも多いのでコピー&ペーストの際は文字コードに注意ください!
Ask_AI
Linuxで、1日以上タイムスタンプ(更新日時)が変更されていないファイルを監視し、メールで通知する設定は、シェルスクリプトとcron(定期実行タスク)を組み合わせて実現するのが最も一般的です。
以下の手順で構築できます。
1. メール送信機能の確認
Linuxからメールを送信できる環境が必要です(mailコマンド、またはmailxコマンド)。
# 送信テスト
echo "テストメール" | mail -s "Subject" your-email@example.com
※メールが届かない場合は、postfixやsendmailなどのMTA設定が必要です。
2. 監視スクリプトの作成
監視対象のディレクトリや時間設定を調整してスクリプトを作成します。
vi /usr/local/bin/check_files.sh
スクリプト内容:
#!/bin/bash
# --- 設定項目 ---
TARGET_DIR="/path/to/watch" # 監視したいディレクトリ
MAIL_TO="your-email@example.com"
SUBJECT="[ALERT] Files not updated for 1 day in $TARGET_DIR"
# ----------------
# 1日以上(24時間以上)更新がないファイルを抽出
FILES=$(find "$TARGET_DIR" -type f -mtime +1)
if [ -n "$FILES" ]; then
# ファイルが存在する場合、メールを送信
echo "以下のファイルが1日以上更新されていません。" > /tmp/old_files.txt
echo "----------------------------------------" >> /tmp/old_files.txt
echo "$FILES" >> /tmp/old_files.txt
mail -s "$SUBJECT" "$MAIL_TO" < /tmp/old_files.txt
rm /tmp/old_files.txt
fi
3. スクリプトの権限設定
スクリプトを実行可能にします。
chmod +x /usr/local/bin/check_files.sh
4. cronの設定(定期実行)
毎日1回、特定の時間にスクリプトを実行するようにcrontabを設定します。
設定例(毎日午前1時に実行):
0 1 * * * /usr/local/bin/check_files.sh
技術的な補足
find コマンドの -mtime:
-mtime +1: 24時間×1日=24時間より前(1日超)に最終更新されたファイル。
-mtime 1: 24時間〜48時間前に更新されたファイル。
- もし1時間単位で細かく見たい場合は
-mmin +1440 (1440分 = 24時間) を使用します。
- ファイルの種類:
-type f でファイルのみを対象にしています。ディレクトリを含める場合は削除します。
- 監視対象:
find "$TARGET_DIR" -type f -mtime +1 の部分で、サブディレクトリも再帰的にチェックします。
ITmedia +2
発展: ログ監視の場合
ファイルの更新だけでなく、ログファイル内の特定の文字列(ERRORなど)を監視してメール通知したい場合は、
logwatchなどのツールや
tail -fと
grepを組み合わせたスクリプトが有効です。
www.mintjams.jp +1