サバステータスをtwitterにポストするスクリプトになる予定の記事4書きかけ

イキママ

  • tailコマンドとか使いたいからshですすめる

test.sh

#!/bin/sh
read LINE < /proc/loadavg

LA1=`echo $LINE | cut -d " " -f 1`
LA2=`echo $LINE | cut -d " " -f 2`
LA3=`echo $LINE | cut -d " " -f 3`
LA4=`echo $LINE | cut -d " " -f 4`
PS=`echo $LA4 | cut -d "/" -f 2`

#ViewFlag LAが5またはPSが250を超えたら出力
VFLA1=`echo "$LA1 > 5" | bc` || 0
VFLA2=`echo "$LA2 > 5" | bc` || 0
VFLA3=`echo "$LA3 > 5" | bc` || 0
VFPS=`echo "$PS > 250" | bc` || 0
VF=`echo "$VFLA1 || $VFLA2 || $VFLA3 || $VFPS" | bc` || 0
echo "$VFLA1 $VFLA2 $VFLA3 $VFPS $VF"

message="$LAMES ロードアベレージ=$LA1 $LA2 $LA3 $PSMES 総プロセス=$PS"
  • もっとキレイになりたいけど`echo "式" | bc` || 0の連続で
  • 期待通りに動いた

test.sh

#!/bin/sh

LAMES=
PSMES=

read LINE < /proc/loadavg

LA1=`echo $LINE | cut -d " " -f 1`
LA2=`echo $LINE | cut -d " " -f 2`
LA3=`echo $LINE | cut -d " " -f 3`
LA4=`echo $LINE | cut -d " " -f 4`
PS=`echo $LA4 | cut -d "/" -f 2`

#ViewFlag LAが5またはPSが250を超えたら出力
VFLA1=`echo "$LA1 > 5" | bc` || 0
VFLA2=`echo "$LA2 > 5" | bc` || 0
VFLA3=`echo "$LA3 > 5" | bc` || 0
VFPS=`echo "$PS > 250" | bc` || 0
VF=`echo "$VFLA1 || $VFLA2 || $VFLA3 || $VFPS" | bc` || 0
echo "$VFLA1 $VFLA2 $VFLA3 $VFPS $VF"

#NoticeFlag LAが10を超えた場合
NFLA1=`echo "$LA1 > 10" | bc` || 0
NFLA2=`echo "$LA2 > 10" | bc` || 0
NFLA3=`echo "$LA3 > 10" | bc` || 0
NF=`echo "$NFLA1 || $NFLA2 || $NFLA3" | bc` || 0
echo "$NFLA1 $NFLA2 $NFLA3 $NF"
if [ $NF -eq 1 ]
then
    LAMES="【注意】"
fi

#WarningFlag LAが20を超えた場合
WFLA1=`echo "$LA1 > 20" | bc` || 0
WFLA2=`echo "$LA2 > 20" | bc` || 0
WFLA3=`echo "$LA3 > 20" | bc` || 0
WF=`echo "$WFLA1 || $WFLA2 || $WFLA3" | bc` || 0
echo "$WFLA1 $WFLA2 $WFLA3 $WF"
if [ $WF -eq 1 ]
then
    LAMES="【!警告!】"
fi


#EmergencyFlag LAが40を超えた場合
EFLA1=`echo "$LA1 > 40" | bc` || 0
EFLA2=`echo "$LA2 > 40" | bc` || 0
EFLA3=`echo "$LA3 > 40" | bc` || 0
EF=`echo "$EFLA1 || $EFLA2 || $EFLA3" | bc` || 0
echo "$EFLA1 $EFLA2 $EFLA3 $EF"
if [ $EF -eq 1 ]
then
    LAMES="【!!緊急!!】"
fi

#プロセス数が500を超えた場合
WPS=`echo "$PS > 500" | bc`
if [ $WPS -eq 1 ]
then
    PSMES="【プロセス過多】"
fi


message="$LAMES ロードアベレージ=$LA1 $LA2 $LA3 $PSMES 総プロセス=$PS"

if [ $VF -eq 1 ]
then
    #wget -O nul --post-data="status=$message" --http-user=**** --http-password=**** http://twitter.com/statuses/update.xml
    echo $message
fi

  • 条件判別はif [ $VF -eq 1 ]こう書かないとだめ

あとは

  • 時計も出力する
  • httpd,mail,dnsが停止してたら警告を出す
    • ログを抽出して出力