IT pass HikiWiki - [Memo2024][ITPASS]システムログメールの設定 Diff
- Added parts are displayed like this.
- Deleted parts are displayed
like this.
{{toc}}
[((<[ITPASS2024]2024年度サーバ構築ログ>)) へ戻る]
= 概要
以下では, ITPASS サーバのディスクの使用状況やアクセス情報などについて, 定期レポートをメールで送信するよう設定する.
基本的な方針は以下の通り.
* cron によって, レポートを送るコマンドを定期的に実行させる
* メールの宛先は ITPASS サーバ管理グループ (itpadmin) 全体
= システムログメールの設定
== 自作スクリプト用 cron ディレクトリ作成
自作の cron 用スクリプト置き場として, /etc/cron.local を作成する.
# mkdir /etc/cron.local
# mkdir /etc/cron.local/hourly
# mkdir /etc/cron.local/daily
# mkdir /etc/cron.local/weekly
# mkdir /etc/cron.local/monthly
== 自作スクリプトの設置
定期報告用のスクリプトには自作した以下のものを用いる. それぞれファイルと設置先は以下のとおりである.
* ((<400_status-disks|URL:../server/2022/system_report/400_status-disks>))
=> /etc/cron.local/daily/400_status-disks
* ((<401_status-quota|URL:../server/2022/system_report/401_status-quota>))
=> /etc/cron.local/daily/401_status-quota
* ((<420_status-network|URL:../server/2022/system_report/420_status-network>))
=> /etc/cron.local/daily/420_status-network
* ((<430_status-rwho|URL:../server/2022/system_report/430_status-rwho>))
=> /etc/cron.local/daily/430_status-rwho
* ((<800_loginfail|URL:../server/2022/system_report/800_loginfail>))
=> /etc/cron.local/daily/800_loginfail
*((<900_tcpserver|URL:../server/2022/system_report/900_tcpserver>))((<900_tcpserver|URL:../server/2022/tcpserver/900_tcpserver>))
=> /etc/cron.local/daily/900_tcpserver
* ((<400_status-apt|URL:../server/2022/system_report/400_status-apt>))
=> /etc/cron.local/weekly/400_status-apt
ただし, 401_status-quota の 27 行目の -sv オプションを -s -v に変更しておく.
各ファイルに実行権限(744)を与える.
具体的な操作は以下の通り.
# vi /etc/cron.local/daily/400_status-disks
# chmod 744 /etc/cron.local/daily/400_status-disks
# vi /etc/cron.local/daily/401_status-quota
# chmod 744 /etc/cron.local/daily/401_status-quota
# vi /etc/cron.local/daily/420_status-network
# chmod 744 /etc/cron.local/daily/420_status-network
# vi /etc/cron.local/daily/430_status-rwho
# chmod 744 /etc/cron.local/daily/430_status-rwho
# vi /etc/cron.local/daily/800_loginfail
# chmod 744 /etc/cron.local/daily/800_loginfail
# vi /etc/cron.local/daily/900_tcpserver
# chmod 744 /etc/cron.local/daily/900_tcpserver
# vi /etc/cron.local/weekly/400_status-apt
# chmod 744 /etc/cron.local/weekly/400_status-apt
== crontab の編集
/etc/crontab に以下の 3 行を追加する. ただし "_at_" は "@" に読み替える.
crontab の編集については ((<[TEBIKI]cron の設定>)) を参照すること.
# vi /etc/crontab
25 6 * * * root cd / && run-parts --report /etc/cron.local/daily |mail -s "`hostname -f` daily run outputs" itpadmin_at_itpass.scitec.kobe-u.ac.jp
47 6 * * 7 root cd / && run-parts --report /etc/cron.local/weekly |mail -s "`hostname -f` weekly run outputs" itpadmin_at_itpass.scitec.kobe-u.ac.jp
#52 6 1 * * root cd / && run-parts --report /etc/cron.local/monthly |mail -s "`hostname -f` monthly run outputs" itpadmin_at_itpass.scitec.kobe-u.ac.jp
== 動作テスト
上記設定が実行される日時を今から数分後の時刻に設定してみて,
実際にメールが来るか確認する. なお, このときテストのため一時的に crontab 内のメールアドレスを現在自分が受信できるものにしておく
このとき, 無事メールが届いたため以下の過程は飛ばし, 次の動作テスト(2 回目) へ移った.
メールが届かない場合, /var/log/syslog を見ると,
CRON[8360]: (CRON) info (No MTA installed, discarding output)
となれば, これは ((<[Memo2021][ITPASS]tcpserver のインストールと設定>)) の際に, exim4 に関するパッケージ (exim4-base, exim4-config, exim4-daemon-light) をアンインストールしたことが原因であると考えられる. そのため, この場合これらのパッケージを再度インストールし,
# apt-get install exim4-base exim4-config exim4-daemon-light
さらに, 以下のパッケージをインストールする.
$ sudo apt-get install bsd-mailx
$ export MAIL=~/Mailbox
=== sendmail の「置き換え」
まず, exim4 が起動している場合は停止.
ここで, exim4 は起動していないことが期待される.
exim4 が起動していたら停止させる.
# /etc/init.d/exim4 stop
exim のブートスクリプトは, /etc/init.d/exim4 で, これに
/etc/rc[2-5].d/S20exim, /etc/rc{1,6}.d/K20exim からリンクが張られてい
る. これを無効にする.
# chmod 000 /etc/init.d/exim4
# mv /etc/init.d/exim4 /etc/init.d/exim4.bak
# update-rc.d exim4 remove
cron から exim が呼び出される処理を無効にする.
/etc/cron.daily/exim4-base の先頭の方に次の行を書き足す.
* 3 行目の [ と ! の間にはスペースがあることに注意. 詰めて書いてはいけない (man [(1)). (「[」と「と」, 「と」と「!」の間にスペースを入れた)
#!/bin/sh
# by Yasuhiro MORIKAWA, 2007-08-10. We need not exim.
if [ ! -f /etc/exim.conf ]; then
exit 0
fi
これで, /etc/cron.daily/eximは, /etc/exim.confが存在しない場合には何もせず終了するようになる.
そして, sendmailを置き換える.
# chmod 000 /usr/lib/sendmail
# chmod 000 /usr/sbin/sendmail
# mv /usr/lib/sendmail /usr/lib/sendmail.bak
# mv /usr/sbin/sendmail /usr/sbin/sendmail.bak
# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
次のコマンドで exim4 関係のパッケージを hold して, 更新されないようにする.
# echo exim4-base hold | dpkg --set-selections
# echo exim4-config hold | dpkg --set-selections
# echo exim4-daemon-light hold | dpkg --set-selections
Debian パッケージの枠組で cron と exim4 (MTA なら何でもよい) は依存関係があるので, exim4 を消してしまうと cron が利用するメールサーバが Debian パッケージの枠組内では存在しないと認識されてしまう. そのため, exim4 を消さずにあえて残している.
== 動作テスト (2 回目)
/etc/crontab 内の日時設定を変更し, 実際にメールが届くか確認する.
401_status-quotaに関する項がないが,まだ quota のインストールと設定を終えておらず, quota をインストールした後で再び確認することにする. また, Letsencrypt のメッセージに関しては, SSL の証明書を取得したのちに再び確認することにする.
テスト終了後は元の時刻, メールアドレスに戻す.
[((<[ITPASS2024]2024年度サーバ構築ログ>)) へ戻る]
= 概要
以下では, ITPASS サーバのディスクの使用状況やアクセス情報などについて, 定期レポートをメールで送信するよう設定する.
基本的な方針は以下の通り.
* cron によって, レポートを送るコマンドを定期的に実行させる
* メールの宛先は ITPASS サーバ管理グループ (itpadmin) 全体
= システムログメールの設定
== 自作スクリプト用 cron ディレクトリ作成
自作の cron 用スクリプト置き場として, /etc/cron.local を作成する.
# mkdir /etc/cron.local
# mkdir /etc/cron.local/hourly
# mkdir /etc/cron.local/daily
# mkdir /etc/cron.local/weekly
# mkdir /etc/cron.local/monthly
== 自作スクリプトの設置
定期報告用のスクリプトには自作した以下のものを用いる. それぞれファイルと設置先は以下のとおりである.
* ((<400_status-disks|URL:../server/2022/system_report/400_status-disks>))
=> /etc/cron.local/daily/400_status-disks
* ((<401_status-quota|URL:../server/2022/system_report/401_status-quota>))
=> /etc/cron.local/daily/401_status-quota
* ((<420_status-network|URL:../server/2022/system_report/420_status-network>))
=> /etc/cron.local/daily/420_status-network
* ((<430_status-rwho|URL:../server/2022/system_report/430_status-rwho>))
=> /etc/cron.local/daily/430_status-rwho
* ((<800_loginfail|URL:../server/2022/system_report/800_loginfail>))
=> /etc/cron.local/daily/800_loginfail
*
=> /etc/cron.local/daily/900_tcpserver
* ((<400_status-apt|URL:../server/2022/system_report/400_status-apt>))
=> /etc/cron.local/weekly/400_status-apt
ただし, 401_status-quota の 27 行目の -sv オプションを -s -v に変更しておく.
各ファイルに実行権限(744)を与える.
具体的な操作は以下の通り.
# vi /etc/cron.local/daily/400_status-disks
# chmod 744 /etc/cron.local/daily/400_status-disks
# vi /etc/cron.local/daily/401_status-quota
# chmod 744 /etc/cron.local/daily/401_status-quota
# vi /etc/cron.local/daily/420_status-network
# chmod 744 /etc/cron.local/daily/420_status-network
# vi /etc/cron.local/daily/430_status-rwho
# chmod 744 /etc/cron.local/daily/430_status-rwho
# vi /etc/cron.local/daily/800_loginfail
# chmod 744 /etc/cron.local/daily/800_loginfail
# vi /etc/cron.local/daily/900_tcpserver
# chmod 744 /etc/cron.local/daily/900_tcpserver
# vi /etc/cron.local/weekly/400_status-apt
# chmod 744 /etc/cron.local/weekly/400_status-apt
== crontab の編集
/etc/crontab に以下の 3 行を追加する. ただし "_at_" は "@" に読み替える.
crontab の編集については ((<[TEBIKI]cron の設定>)) を参照すること.
# vi /etc/crontab
25 6 * * * root cd / && run-parts --report /etc/cron.local/daily |mail -s "`hostname -f` daily run outputs" itpadmin_at_itpass.scitec.kobe-u.ac.jp
47 6 * * 7 root cd / && run-parts --report /etc/cron.local/weekly |mail -s "`hostname -f` weekly run outputs" itpadmin_at_itpass.scitec.kobe-u.ac.jp
#52 6 1 * * root cd / && run-parts --report /etc/cron.local/monthly |mail -s "`hostname -f` monthly run outputs" itpadmin_at_itpass.scitec.kobe-u.ac.jp
== 動作テスト
上記設定が実行される日時を今から数分後の時刻に設定してみて,
実際にメールが来るか確認する. なお, このときテストのため一時的に crontab 内のメールアドレスを現在自分が受信できるものにしておく
このとき, 無事メールが届いたため以下の過程は飛ばし, 次の動作テスト(2 回目) へ移った.
メールが届かない場合, /var/log/syslog を見ると,
CRON[8360]: (CRON) info (No MTA installed, discarding output)
となれば, これは ((<[Memo2021][ITPASS]tcpserver のインストールと設定>)) の際に, exim4 に関するパッケージ (exim4-base, exim4-config, exim4-daemon-light) をアンインストールしたことが原因であると考えられる. そのため, この場合これらのパッケージを再度インストールし,
# apt-get install exim4-base exim4-config exim4-daemon-light
さらに, 以下のパッケージをインストールする.
$ sudo apt-get install bsd-mailx
$ export MAIL=~/Mailbox
=== sendmail の「置き換え」
まず, exim4 が起動している場合は停止.
ここで, exim4 は起動していないことが期待される.
exim4 が起動していたら停止させる.
# /etc/init.d/exim4 stop
exim のブートスクリプトは, /etc/init.d/exim4 で, これに
/etc/rc[2-5].d/S20exim, /etc/rc{1,6}.d/K20exim からリンクが張られてい
る. これを無効にする.
# chmod 000 /etc/init.d/exim4
# mv /etc/init.d/exim4 /etc/init.d/exim4.bak
# update-rc.d exim4 remove
cron から exim が呼び出される処理を無効にする.
/etc/cron.daily/exim4-base の先頭の方に次の行を書き足す.
* 3 行目の [ と ! の間にはスペースがあることに注意. 詰めて書いてはいけない (man [(1)). (「[」と「と」, 「と」と「!」の間にスペースを入れた)
#!/bin/sh
# by Yasuhiro MORIKAWA, 2007-08-10. We need not exim.
if [ ! -f /etc/exim.conf ]; then
exit 0
fi
これで, /etc/cron.daily/eximは, /etc/exim.confが存在しない場合には何もせず終了するようになる.
そして, sendmailを置き換える.
# chmod 000 /usr/lib/sendmail
# chmod 000 /usr/sbin/sendmail
# mv /usr/lib/sendmail /usr/lib/sendmail.bak
# mv /usr/sbin/sendmail /usr/sbin/sendmail.bak
# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
次のコマンドで exim4 関係のパッケージを hold して, 更新されないようにする.
# echo exim4-base hold | dpkg --set-selections
# echo exim4-config hold | dpkg --set-selections
# echo exim4-daemon-light hold | dpkg --set-selections
Debian パッケージの枠組で cron と exim4 (MTA なら何でもよい) は依存関係があるので, exim4 を消してしまうと cron が利用するメールサーバが Debian パッケージの枠組内では存在しないと認識されてしまう. そのため, exim4 を消さずにあえて残している.
== 動作テスト (2 回目)
/etc/crontab 内の日時設定を変更し, 実際にメールが届くか確認する.
401_status-quotaに関する項がないが,まだ quota のインストールと設定を終えておらず, quota をインストールした後で再び確認することにする. また, Letsencrypt のメッセージに関しては, SSL の証明書を取得したのちに再び確認することにする.
テスト終了後は元の時刻, メールアドレスに戻す.