2010年9月16日木曜日

[SA-1-8] Shell ScriptからMySQLへ接続

下記テストのデータ受け入れ先となるテーブルを作成
$ mysql -u [user name] -p [database name]
create table ping_result (
 id integer NOT NULL AUTO_INCREMENT PRIMARY KEY,
 target_address char(20),
 observation_time char(20),
 str_ping char(20)
);

$ get_data.sh
#!/bin/sh
observation_time=`date +%Y%m%d%H%M%S`

target_list=`/usr/bin/mysql -u [user name] -p[password] [database name] -e "select ip_address from server_list" | sed '1d'`

for target_address in $target_list
do
 str_ping=""
 str_ping=`ping -c 1 -t 1 $target_address -q | sed '1,3d' | grep '0 received'`
 
 if test -z $str_ping
 then
  str_ping="OK"
 else
  str_ping="NG"
 fi
 
 echo $target_address" : "$str_ping;
 echo "insert into ping_result (target_address,observation_time,str_ping) values ('"$target_address"','"$observation_time"','"$str_ping"');" >> temp.sql
done

/usr/bin/mysql -u [user name] -p[password] -s [database name] < temp.sql
rm temp.sql
exit 0

$ chmod u+x get_data.sh
$ ./get_data.sh

シェルスクリプトを用いてMySQLに値が登録された事の確認
$ mysql -u [user name] -p [database name]
select * from ping_result;

Linuxの自動実行機能を用いて,定期的にシェルスクリプトが動作するように設定
.crontab
# +------------ 分 (0 - 59)
# | +---------- 時 (0 - 23)
# | | +-------- 日 (1 - 31)
# | | | +------ 月 (1 - 12)
# | | | | +---- 曜日 (0 - 6) (日曜日=0)
# | | | | |
# * * * * * 実行されるコマンド

#=================================================================
# get_data.sh
#毎時5,15,25,35,45,55分に情報取得・DB登録
#=================================================================

5,15,25,35,45,55 * * * * /home/[user name]/get_data.sh &

0 件のコメント: