CentOSで前月の再起動回数を自動で数える…ための月次スクリプト

前回、準備したログを月次で読み込んで、再起動回数を数えるスクリプトを作成していきます。

今回、書きたかったのは、このコマンド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時に実行される、という寸法です。

スクリプト自体は本当にたいしたことない内容なのですが、月次の報告などはいがいと手間のかかるものなので、自動化できるところは工夫しておこうと思いました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です