前回、準備したログを月次で読み込んで、再起動回数を数えるスクリプトを作成していきます。
今回、書きたかったのは、このコマンド1行なのです。
cat /var/log/messages.1 | grep shutdown | wc -l
wcコマンドにlオプションをつけて入力すると、行数を数えてくれます。上のように対象がない場合にもちゃんと0と表示してくれるのが助かります。このコマンドを基本にすえてスクリプトを作成して行こうと思います。
さて、messagesを週次にローテーションしている都合上、月次とは完全一致しません。また、月次報告書は他にも書くことがあるので、お客さまに直接メールするなどのスクリプトである必要もありません。ネタを拾っておいてもらえれば十分です。
以上から、今回のスクリプトはroot権限のcronで月次で実行し、messages.1~5を読んで再起動回数を数えて、ファイルに書き出して、自分のホームディレクトリにコピーしてくれる、という方針で作成しようと思います。
スクリプトの内容は解説するような内容は実はないので、そのまま掲載してしまいます。ファイル名は「count_reboot.sh」としました。
#!/bin/sh # env setting LANG=C PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin # Timestamp Timestamp=$(date +\%Y\%m\%d\%H\%M) # Date Datestamp=$(date +\%Y\%m\%d) # Count reboot file name OutputFile=/tmp/countreboot_$Timestamp.txt # User name UserName=jibunnousername # Group name GrpName=jibunnogroupname # move to user dir UserDir=/home/$UserName # check exsisting the file if [ -e $OutputFile ]; then rm -f $OutputFile fi # make the report file echo '1 week ago (messages.1)' > $OutputFile cat /var/log/messages.1 | grep shutdown | wc -l >> $OutputFile echo '' >> $OutputFile echo '2 weeks ago (messages.2)' >> $OutputFile cat /var/log/messages.2 | grep shutdown | wc -l >> $OutputFile echo '' >> $OutputFile echo '3 weeks ago (messages.3)' >> $OutputFile cat /var/log/messages.3 | grep shutdown | wc -l >> $OutputFile echo '' >> $OutputFile echo '4 weeks ago (messages.4)' >> $OutputFile cat /var/log/messages.4 | grep shutdown | wc -l >> $OutputFile echo '' >> $OutputFile echo '5 weeks ago (messages.5)' >> $OutputFile cat /var/log/messages.5 | grep shutdown | wc -l >> $OutputFile # move to home dir chown $UserName.$GrpName $OutputFile mv $OutputFile $UserDir
すると、自分のホームディレクトリに、
countreboot_YYYYMMDDHHMM.txt
というテキストファイルが出来上がって、中身がこんな感じになります。
1 week ago (messages.1) 0 2 weeks ago (messages.2) 0 3 weeks ago (messages.3) 0 4 weeks ago (messages.4) 0 5 weeks ago (messages.5) 0
実際には再起動することはほとんど無いので0が並ぶと思います。自分で作業記録をとっている以外に再起動があれば、それをログから確認します。
後は、
crontab -e
で、
0 1 1 * * sh /root/count_reboot.sh 1>> /dev/null
とでもcronに設定すれば、毎月1日の午前1時に実行される、という寸法です。
スクリプト自体は本当にたいしたことない内容なのですが、月次の報告などはいがいと手間のかかるものなので、自動化できるところは工夫しておこうと思いました。