第5章 swatch, cron の設定
簡単に言えば、swatch は、ログ監視ツール、cron は、定刻起動プログラム設定ツールです。
ドライバの rasv1.o だけでも、RAS(Reliability Availability Serviceability)としての機能(システム異常時と、RASポートに関するハッキング検出時の音声警告)は、果たします。
でも、それだけじゃつまりません(よほどの場合でないと音声が出ない)ので、ログを監視して、FTP、SSHによるアクセスを検出した場合にその報告を行うように swatch で設定し、毎日定刻に、音声でお知らせ(学校のチャイムみたいなもん)を行うように、cron で設定してみましょう。
なお、ここでは、swatch, cron についての極簡単な使用例を示すだけですので、詳細な使用方法については、マニュアル、それなりの参考書、それなりの情報のWebページ等々を参照してください。
ディストリビューションによって異なるかもしれませんが、多くの場合、swatch と cron はパッケージされてると思います。以下は、すでに swatch と cron はインストールされているという前提で記述します。
1.swatch の設定
root で、ログインして、/root/.swatchrc (/root は、root のホームディレクトリ)を作成します。
その中身は、
# # /sshd/ exec="/FullPath/voice1 p 1 > /dev/null" /in.ftpd/ exec="/FullPath/voice1 p 2 > /dev/null"
のようにします。(/FullPath/ は、voice1 の置いてあるディレクトリ)
そして、
/usr/bin/swatch -c /root/.swatchrc -t /var/log/secure > /dev/null &
のようにすると、swatch が起動します(swatch が、/usr/bin にある場合)。
-t は、tail の意味で、/var/log/secure の最終行に、/root/.swatchrc で指定した文字列を見つけると、その右側に記載された処理を行います。
この場合、
・SSHによるコネクトを検出すると、ch1 の音声を再生
・FTPによるコネクトを検出すると、ch2 の音声を再生
することになるわけです。
ただ、このままだと、サーバーを再起動した際に、swatch の実行もしなければなりませんので、少々面倒です。
サーバーの再起動時に、crontab が自動設定されるようにするには、例えば、
/etc/rc.d/rc.local の最後に以下のように書いておけば、OKです。
echo "swatch : start"
# swatch start
/usr/bin/swatch -c /root/.swatchrc -t /var/log/secure > /dev/null &
実はこれではまだ問題があり、指定のログファイルがローテートされてしまうと swatch は、古い方のファイルの監視を続けてしまうのです。
そこで、ログファイルのローテート直後のタイミングで、再度 swatch を起動しないといけません。
ログファイルのローテートは、ディストリビューションによって異なる設定になっていると思います。
ここでは、RedHat 系の場合で説明します。
/etc/cron.daily/logrotate
というshell スクリプトがありますので、これに次の3行を追加します。
killall swatch killall tail /usr/bin/swatch -c /root/.swatchrc -t /var/log/secure > /dev/null &
ただこれだと、swatch は、ともかくとしても、tail を全部殺してしまうので、他のプログラムでtail を使用している場合は、障害を引き起こすことが考えられますので、あらかじめ、tail を使用する(特にサーバー)プログラムが他に動かないことを確認できるといいでしょう。
2.cron の設定
cron(crond, crontab)を使うと、指定の時間に、指定のプログラムを起動することができます。
以下の記述は、crond は、起動しているという前提で、毎日10:30に始業の18:00に終業の音声を流すものです。
なお、これ以降の作業は、root(スーパーユーザー)で行ってください。
・適当なディレクトリに、cron1 というテキストファイルを作ります。
その内容は、
30 10 * * * /FullPath/voice1 p 4 > /dev/null
00 18 * * * /FullPath/voice1 p 5 > /dev/null
・これを、crontab で、設定します。
crontab が、/usr/bin/ にあるとして、
/usr/bin/crontab /cron1's_directory/cron1
/cron1's_directory/ は、cron1 の置いてあるディレクトリ
これで毎日、10:30にch4の音声が、18:00にch5の音声が再生されます。
が、このままだと、サーバーを再起動した際に、crontab の実行もしなければなりませんので、少々面倒です。
サーバーの再起動時に、crontab が自動設定されるようにするには、例えば、
/etc/rc.d/rc.local の最後に以下のように書いておけば、OKです。
echo "crontab cron1: voice chime auto set start"
# crontab Set
/usr/bin/crontab /cron1's_directory/cron1
ただ、これだけだとcrond が動いているかとか、voice1 や cron1 の存在に関係なく動いちゃいますので、気になる人は確認してから起動するようにするなど、適当に書き換えてください。