Monthly Archives: 11月 2013

nginx tps(transactions per second)監視

TPSは一秒間にそのサーバが処理するトランザクション件数です。
これを少し現実的に変更して(1時間にレストランに来れれるお客様の人数)としてみましょう。

ファイル名
1 #/bin/bash
2
3 #nginx_status_url 手動配置項目
4 NGINX_STATUS_URL=”http://127.0.0.1/nginx_status”
5
6 #10sec 最大値
7 MAX=1;
8 MAILLIST=”foyon0806@gmail.com”
9
10 send_warning()
11 {
12 echo $MESSAGE | /bin/mail -s “$TITLE” “$MAILLIST”
13 }
14
15 QPS1=`curl -s ${NGINX_STATUS_URL} | awk ‘/server accepts handled requests/{getline a;split(a,d);print d[length(d)]}’`
16
17 #10sec
18 sleep 10
19
20 QPS2=`curl -s ${NGINX_STATUS_URL} | awk ‘/server accepts handled requests/{getline a;split(a,d);print d[length(d)]}’`
21 echo $QPS1
22 echo $QPS2
23
24 QPS=`expr $QPS2 – $QPS1`
25 DATA=`date`
26 if [ $QPS -ge $MAX ];then
27 TITLE=”[serious]: ${NGINX_STATUS_URL}”
28 MESSAGE=”Time:${DATA},${NGINX_STATUS_URL} qps per 10 sec more than ${MAX}”
29 send_warning
30 fi
31 exit
~
~

安全なrmシェル

使い方
下記コードはhomeディレクトリの.bashrcまた.zshrcに入れてもいいです。
動作原理
①homeディレクトリに.trashフォルダを作成する
フォルダの中で年-月-日/時によって削除されたファイルを分類される
②1か月前のフォルダーを削除することができる。

### by 3haku.net
function saferm() {
ops_array=($*)
if [[ -z $1 ]] ;then
echo ‘Missing Args’
return
fi
J=0
offset=0
# for zsh
if [[ -z ${ops_array[0]} ]] ; then
offset=1
fi
while [[ $J -lt $# ]] ; do
p_posi=$(($J + $offset))
dst_name=${ops_array[$p_posi]}
if [[ `echo ${dst_name} | cut -c 1` == ‘-‘ ]] ; then
continue
fi
# garbage collect
now=$(date +%s)
for s in $(ls –indicator-style=none $HOME/.trash/) ;do
dir_name=${s//_/-}
dir_time=$(date +%s -d $dir_name)
# if big than one month then delete
if [[ 0 -eq dir_time || $(($now – $dir_time)) -gt 2592000 ]] ;then
echo “Trash ” $dir_name ” has Gone ”
/bin/rm $HOME/.trash/$dir_name -rf
fi
done

# add new folder
prefix=$(date +%Y_%m_%d)
hour=$(date +%H)
mkdir -p $HOME/.trash/$prefix/$hour
echo “Trashing ” $dst_name
mv ./$dst_name $HOME/.trash/$prefix/$hour
J=$(($J+1))
done
}

alias rm=saferm

Linuxで異なる運行状態のプロセス個数とプロセス名を統計する

シェル機能:Linuxの中で異なる運行状態のプロセス数と相応の具体的なプロセス
シェル用法:./cnt_zombie.sh 「am/pc」 「プロセス運行状態:Z/R/S/SS/SW/T/…」
使用サンプル:./cnt_zombie.sh arm Z; ./cnt_zobiem.sh pc R;

ファイル名:cnt_zombie.sh
#! /bin/sh

IFS_old=$IFS
IFS=$’\n’
file=”zombie.txt”
num=0
proc_name=
self=”cnt_zombie.sh”

while test true
do
if [ $1 = “arm” ]
then
list=”`ps -w|grep $2|grep -v grep|grep -v $self`”
elif [ $1 = “pc” ]
then
list=”`ps axu|grep -w $2|grep -v grep|grep -v $self`”
fi

if [ “x$list” != “x” ]
then
x=
#echo “list: $list”
#num=`echo $list|wc -l`
#echo “num: $num”
else
continue
fi

if [ $1 = “pc” ]
then
pos=`ps axu|grep PID|grep -bo COMMAND|cut -d “:” -f 1`
elif [ $1 = “arm” ]
then
pos=26
fi

num=0
for line in $list
do
num=$[$num+1]
if [ -n $proc_name ]
then
proc_name=”$proc_name\n\t`echo $line|cut -c $pos- `”
else
proc_name=”`echo $line|cut -c $pos- `”
fi
done

echo -e “process conut: $num, process list:$proc_name\n” >> $file
sleep 3
done

ログファイルの中から違ったスレッドの内容を抽出する

機能:1個簡単なシェルファイルで簡単にログ内容を抽出する。
シェルの使い方:./grep_log.sh ログファイル
使用サンプル:./grep_log.sh threadp_test.log ログファイルの中から20個スレッドログ内容から単独スレッドログに抽出する

ファイル名:grep_log.sh

#! /bin/bash

function extract_pthread_log
{
i=0
while [ $i -lt 20 ]
do
if [ $i -lt 10 ]; then
var=”pthread0$i”
else
var=”pthread$i”
fi
filename=”$var.log”
#echo “[$var, $filename]”
grep -i $var $1 > $filename
i=$[$i+1]
done
}

if [ -f $1 ]
then
extract_pthread_log
fi

exit 0

Androidパッチコマンド処理を発送する

#/bin/sh
awk -F’ ‘ ‘
BEGIN{
}

{
print $1″0″ > “out”;
}

END{

}

‘ $1
while read -r line
do
echo $line;
done < out

多数国家の時間を示す

機能:多数国家の時間を示す
ソース:
<# ” Satnaam WaheGuru Ji” Author : Aman Dhally E-Mail : amandhally@gmail.com website : www.amandhally.net twitter : https://twitter.com/#!/AmanDhally facebook: http://www.facebook.com/groups/254997707860848/ Linkedin: http://www.linkedin.com/profile/view?id=23651495 Date : 26-Sep-2012 File : Remote Office Times Purpose : Get The Remote Office Times Version : 1 my Spider runned Away #>

# useful Links
# http://www.timeanddate.com/ <- To get the DST and GMT Offset

# Creating New Ps Object
$RemoteTIme = New-Object -TypeName Psobject
#TimeZone
$Local = (Get-Date).ToShortTimeString()
$Dubai = (Get-Date).ToUniversalTime().AddHours(4).ToShortTimeString()
$Delhi = (Get-Date).ToUniversalTime().AddHours(5).AddMinutes(30).ToLongTimeString()
$Singa = (Get-Date).ToUniversalTime().AddHours(8).ToShortTimeString()
# Manchester used Day Light Time Saving so currenlty it is +1 Hours
$Manch = (Get-Date).ToUniversalTime().AddHours(1).ToShortTimeString()

# Adding Members to PS Object So that they Looks Nice

$RemoteTIme | Add-Member -MemberType ‘NoteProperty’ -Name Loc -Value $Local
$RemoteTIme | Add-Member -MemberType ‘NoteProperty’ -Name Del -Value $Delhi
$RemoteTIme | Add-Member -MemberType ‘NoteProperty’ -Name Dub -Value $Dubai
$RemoteTIme | Add-Member -MemberType ‘NoteProperty’ -Name Sin -Value $Singa
$RemoteTIme | Add-Member -MemberType ‘NoteProperty’ -Name Man -Value $Manch

# Display the Output to the console.
$RemoteTIme | ft * -AutoSize

## End of the Script ##

##########################-| a m a n d h a l l y |-#########################

mysqlデータベースにテーブルがクラッシュするかどうか検査

このシェルの主な用途はmysqlサーバーの上ですべてのデータベースあるいは単独のデータベースのテーブルが壊れるかどうか測定
OS:RHEL/Centos

ファイル名:check_mysql.sh
#!/bin/bash
#このシェルはmysqlのすべてのdbまた単独dbのテーブルが壊れるかどうか検査
#パラメータ説明 pass mysqlのアカウント情報name mysqlのディレクトリパス-directory_list ディレクトリリスト-file_list
#データベース名repair_countは単独DBの未修復総計数
#repair_count_allはすべての用修復のテーブル総計 mysql_versionはmysqlバージョン _file_nameはテーブル名前

echo -e “このシェルはmysqlサーバーのすべてのテーブルのチェック作業を行う\n\n”
pass=XXX
name=XXX

read -p “mysql保存パスを入力してください: ” choose
data_path=$choose
unset choose

read -p “mysql保存パスを入力してください: ” mysql_version
#標準入力、標準輸出、標準エラー輸出ファイルの標示 0,1,2で標示
read -p ” サーバーのすべてのDBまた特定なDBを選んでください 1:すべてのDB 2:特定なDB: ” choose

if [ $choose == 1 ]; then
cd $data_path
for directory_list in $(ls)
do
if [ -d $directory_list ];then
if [ “mysql” != “${directory_list}” -a “test” != “${directory_list}” ];then
cd ${directory_list}
echo “現在のDB:”${directory_list}
for file_list in $(ls *.frm)
do
_file_name=${file_list%.frm}
echo -e “\n” >> /tmp/check_table_all.log
${mysql_version} -h 127.0.0.1 -u${name} -p${pass} -e “check table “${directory_list}.${_file_name} 2>&1 >> /tmp/check_table_all.log
done
cd ..
fi
fi
done
cat /tmp/check_table_all.log | grep “Table is marked as crashed” > /tmp/check_table_repair.log
repair_count_all=` awk ‘END{print NR}’ /tmp/check_table_repair.log `
echo -e “全部DBは${repair_count_all}テーブルの修復が必要!”
more /tmp/check_table_repair.log
else
read -p “検査するデータベースの名前を入力してください: ” db_name
cd ${data_path}/${db_name}
for file_list in $(ls *.frm)
do
_file_name=${file_list%.frm}
echo -e “\n” >> /tmp/check_${db_name}.log
${mysql_version} -h 127.0.0.1 -u${name} -p${pass} -e “check table “${db_name}.$_file_name 2>&1 >> /tmp/check_${db_name}.log
done
cat /tmp/check_${db_name}.log | grep “Table is marked as crashed” > /tmp/check_${db_name}_Repair.log
repair_count=`awk ‘END{print NR}’ /tmp/check_${db_name}_Repair.log`
echo -e “${db_name}の中で${repair_count}個テーブルの修復が必要です!\n ”
more /tmp/check_${db_name}_Repair.log
fi

プログラムの実行終了の後でメールを出す

たまに一つのプログラムは一晩また数日かかる、私達はどのぐらい運行したことを最後まで
把握してないです。さらに実行終了しても必要な分析を行います。常に縛れて終わったのかどうか良くなくて、このシナリオがプログラムの実行終了に用いた後に私に1通のメールを発送する。警告が出る場合、メールのクライアントは少し設けしたほうがいいです。

#!/bin/sh

curDate=`date`
# Run your program here
endDate=`date`
echo “Running complete! Started: “$curDate “Ended: “$endDate |mail -s “MSONEW Run Complete!” myname@domain.com

shell shiftの使い方

#!/bin/sh
while [ $# -gt 0 ]
do
echo $1
echo $#
if [ ! -d $1 ]
then
echo “$1 not dir”
fi
shift
done

Linux環境でファイル更新またロールバック

更新作業:
./upgrade.sh filename.ext go
元のファイルは filename.ext.bakを変更する、同じfilename.ext.newをfilename.txtへ変更する。

還元作業:
./upgrade.sh filename.ext back
更新作業の操作と逆にする。
実行コマンド
update.sh+更新ファイルの全パス+パラメータ(go|back)

#!/bin/sh

filename=$1
newfilename=$filename.new
bakfilename=$filename.bak

if [ ! -f $filename ]; then
printf “$filename NOT is exist\n”
exit
fi

function upgrade()
{
if [ -f $newfilename ]; then
mv $filename $bakfilename
mv $newfilename $filename
else
printf “$newfilename NOT is exist\n”
fi
}

function restore()
{
if [ -f $bakfilename ]; then
mv $filename $newfilename
mv $bakfilename $filename
else
printf “$bakfilename NOT is exist\n”
fi
}

if [ “$2” = “go” ]; then
upgrade
elif [ “$2” = “back” ]; then
restore
else
printf “Usage:CMD {path/fn.ext} {go|back} \n”
printf “go – MUST exist the [path/fn.ext.new] \n”
printf “back – MUST exist the [path/fn.ext.bak] \n”
fi

1 / 912345...最後 »