
UNIX Cafe | 第16回
はじめに|ログを読むってどういうこと?
ミナちゃんユニ先生、前回のスクリプトでログを残すようになったんですけど、
毎回ファイルを開いてチェックするのがちょっと大変で…☕💦



ふむふむ、それは良い悩みだね。
ログを“書く”ことができたら、次は“読む”番だ。
今日は、ログの中から大事なメッセージを見つけ出して、
自動でお知らせしてくれる仕組みを作ってみよう📩
grepでエラーメッセージを見つけよう



まずは“grep”コマンドの登場だ。
grepは、ファイルの中からキーワードを探す“探偵さん”みたいなコマンド🔎
エラー行を検索してみよう
bash
$ grep "ERROR" /home/username/unix_cafe/cafe_log.txt



わぁ、ERROR って書かれた行だけが出てきました!☕✨
これなら問題のある部分をすぐに見つけられますね。



そうそう。カフェで例えるなら、
“今日のコーヒー豆が焦げてないか”チェックするみたいなものさ☕
mailコマンドでお知らせを送ろう


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の世界でも同じなんだよ
エラーをメールで送信するスクリプト



では早速、その結果を“自動で通知”する仕組みを作ろう。grep で見つけたエラーをメールで送れば、毎日ログを開かなくても確認できるんだ📩
for Linux
/home/username/この部分を自分のユーザー名に書き換えてください。
#!/bin/bash
# ☕ error_check.sh
# ログの中からERRORを探してメール送信
LOG_FILE="/home/username/unix_cafe/cafe_log.txt"
RESULT=$(grep "ERROR" $LOG_FILE)
if [ -n "$RESULT" ]; then
echo "☕ カフェログにエラーが見つかりました!" | mail -s "UNIX Café:エラーレポート" username@example.com
else
echo "✨ 今日もカフェは順調です!" | mail -s "UNIX Café:正常レポート" username@example.com
fi



ファイル名は「error_check.sh」にして保存し、実行権限をつけましょう。
ファイルに実行権限をつける
bash
$ chmod +x error_check.shApple純正の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)が直接届ける」
そんな違いだと思えば覚えやすいね✨
エラーをメールで送信するスクリプト



macOSでは mail コマンドが使えないから、
代わりに Mail.app にお願いして送ってもらうんだ🍎📩osascript を使えば、店長(Mail.app)が自分で手紙を届けてくれるよ。
for macOS
/Users/username/この部分を自分のユーザー名に書き換えてください。
#!/bin/bash
# ☕ error_check_mac.sh
# ログの中からERRORを探してMail.appで送信(確実動作版)
LOG_FILE="/Users/username/unix_cafe/cafe_log.txt"
RESULT=$(grep "ERROR" "$LOG_FILE")
if [ -n "$RESULT" ]; then
MESSAGE="☕ カフェログにエラーが見つかりました!"
SUBJECT="UNIX Café:エラーレポート"
else
MESSAGE="✨ 今日もカフェは順調です!"
SUBJECT="UNIX Café:正常レポート"
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



わぁ〜✨ 本当にメールが届きました!
カフェのログが毎晩送られてくるなんて、ちょっと感動です☕📩



よくできました、ミナちゃん✨
これでカフェの“日報メール”も自動で届くようになったね。
毎晩、ログをチェックして「今日もカフェは順調です☕」って知らせてくれる。UNIX Caféの夜勤スタッフとして、もう立派に一人前だよ🌙
ファイルに実行権限をつける
bash
$ chmod +x error_check_mac.sh


ファイル名は「error_check_mac.sh」にして保存し、実行権限をつけましょう。
毎晩22:00に自動実行 & スクリプト内で「送信成功!」を記録 for Linux
crontab を開く
bash
$ crontab -e
以下のコードを追加
/home/username/この部分を自分のユーザー名に書き換えてください。
0 22 * * * /home/username/unix_cafe/error_check.sh >> /home/username/unix_cafe/cron_debug.log 2>&1



Linux:/home/username/macOS:/Users/username/ の部分は自分の環境に合わせて変更してくださいね。
# 直前の処理結果で成功/失敗を記録
if [ $? -eq 0 ]; then
/bin/echo "$(/bin/date '+%Y-%m-%d %H:%M:%S') 送信成功!" >> /home/username/unix_cafe/mail_log.txt
else
/bin/echo "$(/bin/date '+%Y-%m-%d %H:%M:%S') 送信失敗…" >> /home/username/unix_cafe/mail_log.txt
fi
error_check.sh の末尾に追記(osascript の直後でOK)
事前に実行権限:chmod +x /home/username/unix_cafe/error_check.sh
起動して設定すれば、mail/mailx が使える
bash
$ sudo systemctl enable --now postfix
これで mail コマンドが内部で Postfix を呼び出せるようになります📬
Linuxカフェにはね、郵便係(MTA)は最初から店の奥にいるんだ。
でも、初期設定のままだとまだ休憩中☕💤
「お仕事お願いね」って言ってあげれば、ちゃんと起きてメールを届けてくれるんだ📩✨
☕ ポイント
cronは PATH が狭いので 絶対パス(/bin/echo/bin/date)で安心。- 実行権限もお忘れなく:
chmod +x /Users/username/unix_cafe/error_check_mac.sh
これで、毎晩22:00に自動送信しつつ、mail_log.txt に
「送信成功!」の足跡が残ります📬✨
まとめ|ログを見守るカフェの夜



エラーを見つけてメールで知らせてくれるなんて、
カフェが自分で“日報”を書いてるみたいですね📩



毎晩、ログを開かなくても、カフェのスタッフ(スクリプト)がちゃんと報告してくれるんだ。これが“自動化”の第一歩だよ☕🌙



じゃあ、次は“バックアップ”も自動にしたいです!



いいねぇ、それこそカフェの“閉店作業”だね。次回は、1日の記録をきれいに包んで保存しておこう☕✨







