cronで定期実行したいときに気になるのは、エラーなくプログラムが実行されているかどうか、、、
cronのMAILTOを設定すれば、実行結果をメールで通知することができます
・環境
Ubuntu 20.04
msmtp version 1.8.24
・メール送信ツールでcron実行結果をメール送信
cronは実行結果をデフォルトでメールで送信できるようになっています。ただし、メール送信ツールと設定が必要です
今回はmsmtpを使用します
msmtpは外部SMTPサーバーを経由してメールを送信するシンプルなツールです
msmtpをインストール
アップデートしてからインストールします
sudo apt update
sudo apt install msmtp
インストール途中で、AppArmor supportを使用するか聞かれますが使用するを選択します
AppArmor (Application Armor) は、Linuxシステムでアプリケーションごとにセキュリティポリシーを定義して動作を制御するためのセキュリティモジュールです
AppArmorは、アプリケーションがアクセス可能なリソースを制限することで、システムのセキュリティを強化しますAppArmor supportは、AppArmorがインストールされ、有効化されているシステム上で特定のアプリケーションやプロセスがAppArmorのポリシー管理に対応していることを意味します
設定ファイルの作成
gmailを使う場合を想定して設定ファイルを作成します
nano ~/.msmtprc
~/.msmtprcは、現在のユーザーのホームディレクトリ内にある隠し設定ファイル.msmtprcを指します
以下に設定内容を記述します
defaults
tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile ~/.msmtp.log
account default
host smtp.gmail.com
port 587
auth on
user XXX@gmail.com
password XXXXXXXXXXXXXXXXX
from XXX@gmail.com
userとfromには使用するgmailアドレスを書きます
passwordはgmailのアプリパスワードを空白なしで書きます
アプリパスワードがわからない方は以下の記事を参考に取得してください
パーミッションの変更
chmod 600 ~/.msmtprc
sendmailコマンドの代替として設定
sudo ln -sf /usr/bin/msmtp /usr/sbin/sendmail
複数のユーザーやrootユーザーで設定する場合
crontabはユーザーごとに違うため、この設定ファイルもユーザーごとに作成する必要があります
ユーザー切り替えコマンドでユーザーを切り替えて先ほどの設定ファイルの作成から同じ作業をする必要があります
# rootユーザーに変更
sudo su
# 他のユーザーに変更
su username
これでmsmtpの設定が完了です
・cronでMAILTOに設定
cronジョブでメール通知を有効化します
crontabを編集します
crontab -e
crontabの中にMAILTOを追加して、メールアドレスを記述します
MAILTOを””にするとメール送信が無効になります
MAILTO="XXX@gmail.com"
メール通知が正しく動作するかを確認するため、以下の簡単なジョブを設定します
* * * * * echo "Cron job executed successfully"
1分ごとにメールが届いていれば確認完了です
実行ログを見るには以下のコマンドを入力します
リアルタイムでログを監視することができます
tail -f ~/.msmtp.log
ログは以下のようなものが出力されると思います
12月 08 05:55:05 host=smtp.gmail.com tls=on auth=on user=XXX@gmail.com
from=XXX@gmail.com recipients=XXX@gmail.com mailsize=503 smtpstatus=250
smtpmsg='250 2.0.0 OK exitcode=EX_OK
ログの解析
host=smtp.gmail.com
メール送信に使用したSMTPサーバーがgmail
のSMTPサーバー(smtp.gmail.com
)であることを示しています
tls=on
メール送信時にTLS(Transport Layer Security)が有効であり、通信が暗号化されていることを示します
auth=on
SMTP認証が有効であり、認証情報(ユーザー名とパスワード)が使用されたことを示しています。
user=XXX@gmail.com
GmailのSMTPサーバーにログインするために使用されたユーザーアカウントを示しています
from=XXX@gmail.com
メールの送信元アドレスを示しています
recipients=XXX@gmail.com
メールの送信先アドレス(受信者)を示しています
mailsize=503
送信されたメールのサイズが503バイトであることを示しています。
smtpstatus=250
SMTPプロトコルにおけるステータスコード。250
は「リクエスト成功」を意味します
smtpmsg=’250 2.0.0 OK …’
SMTPサーバーからの詳細なレスポンスメッセージ。250 2.0.0
OKは、メールが正しく受け付けられたことを示します
exitcode=EX_OK
プロセスの終了コードで、EX_OKは正常終了を意味します
このように、TLS(Transport Layer Security)が有効であり、通信が暗号化されて、SMTP認証が有効であり、正常に終了したことがわかります
コメント