IT pass HikiWiki - [Memo2020][ITPASS]システムログメールの設定 Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

{{toc}}

[((<[ITPASS2018]2018年度サーバ構築マニュアル>)) へ戻る]


= 概要

以下では, 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

== 自作スクリプトの設置

定期報告用のスクリプトには自作した以下のものを用いる. それぞれファイルと設置先は以下のとおりである.

  * ((<status-disks|URL:../server/2014/system_report/status-disks>))
    => /etc/cron.local/daily/400_status-disks
  * ((<status-quota|URL:../server/2014/system_report/status-quota>))
    => /etc/cron.local/daily/401_status-quota
  * ((<status-network|URL:../server/2014/system_report/status-network>))
    => /etc/cron.local/daily/420_status-network
  * ((<status-rwho|URL:../server/2014/system_report/status-rwho>))
    => /etc/cron.local/daily/430_status-rwho    
  * ((<loginfail|URL:../server/2014/system_report/loginfail>))
    => /etc/cron.local/daily/800_loginfail      
  * ((<tcpserver|URL:../server/2014/system_report/tcpserver>))
    => /etc/cron.local/daily/900_tcpserver      
  * ((<status-apt|URL:../server/2014/system_report/status-apt>))
    => /etc/cron.local/weekly/400_status-apt

各ファイルに実行権限(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


== 動作テスト

上記設定が実行される日時を今から数分後の時刻に設定してみて,
実際にメールが来るか確認する.
メールは届かない場合,  /var/log/syslog を見ると,

   CRON[8360]: (CRON) info (No MTA installed, discarding output)

とあれば, これは  ((<[Memo2018][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 内の日時設定を変更し, 実際にメールが届くか確認する.

このとき, メールには,

  /etc/cron.local/daily/240_letsencrypt_renew:
  Saving debug log to /var/log/letsencrypt/letsencrypt.log
  /etc/cron.local/daily/401_status-quota:
  repquota: Mountpoint (or device) /home not found or has no quota enabled.
  repquota: Not all specified mountpoints are using quota.
  repquota: Mountpoint (or device) /home not found or has no quota enabled.
  repquota: Not all specified mountpoints are using quota.

というエラーメッセージが来るが,これはまだ quota のインストールと設定を終えていないためなので, quota をインストールした後で再び確認することにする. また, Letsencrypt  のメッセージに関しては, SSL の証明書を取得したのちに再び確認することにする.

テスト終了後は元の時刻に戻す.

= 参考文献

* ((<[ITPASS2017]システムログメールの設定>))
* ((<[TEBIKI]cron の設定>))

[((<[ITPASS2018]2018年度サーバ構築マニュアル>)) へ戻る]