
UNIX Cafe | 第16回
はじめに|ログを「読む」ことで、自動化は完成する
前回は、スクリプトの実行結果を ログとして残す ところまで進みました。
ただ、ログは「残しただけ」では、まだ少し不便です。
- 毎回ファイルを開くのは面倒
- 重要なエラーを見逃してしまう
- 忙しい日は確認を忘れがち
そこで今回は、ログの中から必要な情報だけを取り出し、
自動で知らせてくれる仕組み を作ります。
これができると、UNIX Cafe の自動化は 一段階レベルアップ します。
grepでログの中から「異常」を見つける
ログファイルは、
1日分・1週間分と増えていくと、とても人の目では追えません。
そこで使うのが grep コマンド です。
grep は、ファイルの中から特定の文字列を探すコマンド です。
エラー行を検索してみよう
grep "ERROR" /home/username/unix_cafe/cafe_log.txtこのコマンドは、
cafe_log.txtの中から"ERROR"を含む行だけを- 画面に表示する
という意味になります。
👉「問題が起きた行だけを見る」という、とても大事な第一歩です。
ログ監視とメール通知の考え方
ここで一度、全体像を整理します。
今回やりたいことは、次の流れです。
- ログファイルを読む
- エラーがあるか調べる
- 結果をメールで知らせる
この3つを組み合わせることで、
- ログを毎日確認しなくても
- 問題があれば自動で気づける
安心できる運用環境 が完成します。
Linuxでエラーをメール通知するスクリプト
Linuxでメールを送るときはね、
実はカフェの裏でこっそり働いている “郵便係(MTA:Mail Transfer Agent)” が
しっかりお仕事をしてくれているんだ📬
たとえば sendmail や postfix、exim なんかがその郵便係。mail や mailx コマンドは、ただ「この手紙をお願いね☕」と伝えるだけで、
あとは彼らが宛先までちゃんと届けてくれるんだ。
だからLinuxでは、echo "Hello" | mail -s "Test" you@example.com
って書くだけで、ほんとにメールが届くんだよ📨✨
Linuxカフェのキッチンには、いつも準備万端のスタッフたちがいて、
依頼が来たらすぐに湯気を立ててメールを出してくれる☕🔥
もし外の郵便局(SMTPサーバー)を使いたければ、mailx の設定ファイルにちょっとレシピを書き足すだけでOK。
つまり、Linuxの世界では、メール送信は“標準装備のサービス”なんだ☕✨
「カフェのスタッフが多いほど仕事が早い」ってこと、UNIXの世界でも同じなんだよ
エラー検知+メール送信スクリプト
#!/bin/bash
# error_check.sh
LOG_FILE="/home/username/unix_cafe/cafe_log.txt"
RESULT=$(grep "ERROR" "$LOG_FILE")
if [ -n "$RESULT" ]; then
echo "カフェログにエラーが見つかりました。" \
| mail -s "UNIX Cafe : Error Report" username@example.com
else
echo "本日のログに問題はありません。" \
| mail -s "UNIX Cafe : Daily Report" username@example.com
fiポイント
grepの結果が 空でないか をチェック- エラーがあれば「エラーレポート」
- なければ「正常レポート」
👉ログを見に行くのではなく、ログから知らせてもらう 発想です。
スクリプトに実行権限を付ける
chmod +x error_check.shこれを忘れると、cron から実行できません。
macOSの場合|Mail.app を使う理由(確実・おすすめ)
macOSでメールを送るときはね、
実はLinuxみたいに mail コマンドをそのまま使うことができないんだ。
というのも、macOSには “メールを配信するためのエンジン(MTA)” が標準で動いていないんだよ。
Linuxでは sendmail や postfix がこっそりキッチンの裏で働いていて、mail コマンドがそれを呼び出してメールを届けてくれる📬
でもMacには、そのキッチンスタッフがいない。
だから「mail で送って!」と頼んでも、誰も動いてくれないんだ。
そこで登場するのが Apple純正のMail.app!🍎✨
これなら、macOSの中にすでに整っている“バリスタ”(Mailアプリ)をosascript(AppleScript)経由で直接呼び出して、
コーヒーを渡すようにスッとメールを届けてくれる📩
つまり、
Macでメールを出すなら mail ではなく “Mail.appにお願いする” のが正解なんだ。
「Linuxのカウンターには郵便係がいるけど、Macのカフェでは店長(Mail.app)が直接届ける」
そんな違いだと思えば覚えやすいね✨
Apple純正の Mail.app を呼び出す
macOS には、Linux のような MTA(sendmail / postfix) が標準では動いていません。
そのため macOS では、
mailコマンドを使うより- Apple純正の Mail.app を呼び出す 方が確実です。
macOS 用スクリプト(Mail.app 使用)
#!/bin/bash
# error_check_mac.sh
LOG_FILE="/Users/username/unix_cafe/cafe_log.txt"
RESULT=$(grep "ERROR" "$LOG_FILE")
if [ -n "$RESULT" ]; then
MESSAGE="カフェログにエラーが見つかりました。"
SUBJECT="UNIX Cafe : Error Report"
else
MESSAGE="本日のログに問題はありません。"
SUBJECT="UNIX Cafe : Daily Report"
fi
osascript <<EOF
tell application "Mail"
set newMessage to make new outgoing message with properties {subject:"$SUBJECT", content:"$MESSAGE", visible:false}
tell newMessage
make new to recipient at end of to recipients with properties {address:"username@example.com"}
send
end tell
end tell
EOF👉 macOS では Mail.app を使う
これを覚えておくと安心です。
ファイルに実行権限をつける
chmod +x error_check_mac.sh毎晩22:00に自動実行 & スクリプト内で「送信成功!」を記録 for Linux
crontab を開く
crontab -e
毎晩22:00に実行する設定
0 22 * * * /home/username/unix_cafe/error_check.sh >> /home/username/unix_cafe/cron_debug.log 2>&1| フィールド | 値 | 意味 |
|---|---|---|
| 分 | 0 | 0分 |
| 時 | 22 | 22時 |
| 日 | * | 毎日 |
| 月 | * | 毎月 |
| 曜日 | * | すべての曜日 |
👉「毎日22:00に1回実行」という、明確な意味を持った設定です。
処理結果をログに残して安心度アップ
if [ $? -eq 0 ]; then
/bin/echo "$(date '+%Y-%m-%d %H:%M:%S') 送信成功" >> /home/username/unix_cafe/mail_log.txt
else
/bin/echo "$(date '+%Y-%m-%d %H:%M:%S') 送信失敗" >> /home/username/unix_cafe/mail_log.txt
fiこれをスクリプトの末尾に追加すると、
- メール送信の成功・失敗
- 実行時刻
がログとして残ります。
👉 自動処理は「記録が残る」ことで完成 します。
ポイントまとめ
grepでログを読む- メールで結果を通知
cronで毎日自動実行- 成功・失敗もログに残す
この流れができれば、ログ監視の基本はマスター です。
まとめ|ログを見に行かない運用へ
ログは、
- 毎日開いて確認するものではなく
- 必要なときに知らせてくれるもの
に変えられます。
今回の仕組みは、
バックアップや監視、自動レポートなど、
あらゆる自動化の土台になります。
次回は、1日の記録をまとめて保存する「自動バックアップ」 へ進みましょう。
☕ UNIX Cafe の自動化は、ここからどんどん楽しくなります。
さらに学びたいあなたへ
📘 用途ごとに選ぶ Linux のおすすめ本

