์ถ ์ฒ : http://delfa.blog.me
shell, kill, while, for, if
#
# ์
๋ ฅ string์ ํฌํจํ๋ ํ๋ก์ธ์ค ์ฃฝ์ด๊ธฐ
for pno in `ps | grep $1 | grep -v "grep"`
do
echo $pno
kill -9 $pno
done
#
# ์
๋ ฅํ ์๊ฐ๊น์ง 10๋ถ ๊ฐ๊ฒฉ์ผ๋ก ๋ช
๋ น์ด ์ํํ๊ธฐ
if [ "$1" = "" ]; then end="2300"; else end=$1; fi
while :
do
tim=`date +"%H%M"`
echo `date +"%Y-%m-%d %H:%M:%S"`
if [ "$tim" -ge "$end" ]; then
(
cd {directory}
{command1}
{command2}
)
exit
fi
sleep 600
done
shell, kill, while, for, if
#
# ์
๋ ฅ๋ ๋ชจ๋ ํ์ผ์ด ์๊ธธ๋๊น์ง sleep
#
# 8์ด ์ฃผ๊ธฐ๋ก ์๋ฃ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ฉฐ
# ์๋ฃ๋ ๋ชฉ๋ก์ ๋ฐ์ ์ผ๋ก ๋ณด์
#
# ์๋์ ๊ฐ์ด ๋ณ๋ ฌ๋ก ์ฌ๋ฌ๊ฐ์ ํ๋ก์ธ์ค๋ฅผ ์ํํ ๋ ์ ์ฉ
# for fnm in a b c d e f g
# do
# (
# {command} > result.$fnm.log
# touch $fnm
# ) &
# done
# sleepuntil a b c d e f g
# rm -f a b c d e f g
lst=$*
fnd=""
while [ "$fnd" = "" ]
do
fnd="1"
#
echo " state : \c"
for arg in $lst
do
if [ -f "$arg" ]; then
echo "\033[7m$arg\033[0m \c"
else
echo "$arg \c"
fnd=""
fi
done
echo "\033[K\033[160D\c"
if [ "$fnd" = "" ]; then sleep 8; fi
done
echo "\033[K\c"
sqlplus
#
############################################################
# sqlplus์ ํตํด ์ถ๋ ฅ๋ ๊ฐ์ awk ํ๋ก๊ทธ๋จ์ ํตํด ๋ ์ฝ๋๋ง ์ถ๋ ฅ
# . ๋ณ์๋ฅผ ์ด์ฉํ์ฌ ๋์ query๊ฐ ๊ฐ๋ฅ
# . ๋ณธ ์๋ record ๊ฐ 2์ค์ ๊ฑธ์ณ ์ถ๋ ฅ๋๋ ๊ฒฝ์ฐ์.
(
echo "alter session set nls_date_format='YYYY/MM/DD HH24:MI:SS';"
echo "set feedback off"
echo "set head off"
echo "set linesize 1000"
echo "select a,b,c,d from ... ;"
) | sqlplus <id>/<password> | grep -v "^$" | nawk '
BEGIN { mod=0; }
mod==0&&/^SQL>/ { mod=1; next; }
mod==1&&/^SQL>/ { mod=2; next; }
mod==1 {
if($2=="") printf "%s ",$1; else printf "%s %s %s\n",$1,$2,$3;
next;
}
'
ftp
#
############################################################
# ๋ฆฌ๋ชจํธ ์๋ฒ์ file์ ftp๋ฅผ ํตํด ๊ฐ์ง๊ณ ์ค๋ script
# ์์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ณ์์ directory๋ file์ ๊ฐ์ ธ์ด
directory="simth"
filename="j.p.smith"
(
echo "user <id> <password>"
if [ "$opt" = "u" ]; then
echo "cd /user/home/$directory"
echo "mget <filename>.log"
else
echo "cd /tmp/log"
echo "get $filename.log"
fi
echo "bye"
) | ftp -ni <ip_address> > /dev/null 2>&1
expr
#
############################################################
# record file์์ ๊ฐ์ ๊ฐ์ ธ์ ์ฐจ๋ก๋ก ์ํํ๊ธฐ
for usr in `cat /etc/passwd | awk -F':' '{ print $1; }'`
do
(
cd ~$usr
du -s .
)
done > diskusage.log
#
# ๋๋ record๊ฐ ๋ณต์กํ ๊ฒฝ์ฐ
#
lno=1
lns=`head -1 /etc/passwd`
while [ "$lns" != "" ]
do
usr=`expr "$lns" : '\([^:]*\).*$'`
uid=`expr "$lns" : '[^:]*:[^:]*:\([^:]*\).*$'`
# action
echo "$usr's uid = $uid"
#
lno=`expr $lno + 1`
lns=`tail +$lno /etc/passwd | head -1`
done
od, awk
# od ๋ช ๋ น์ด์ -c ์ -x ์ต์ ์ ๋์์ ์ฌ์ฉํ๋ ํจ๊ณผ
# - HEX ๊ฐ๊ณผ ์ถ๋ ฅ์ด ๊ฐ๋ฅํ ascii ๊ธ์๋ฅผ ๊ฐ์ ๋ผ์ธ์ ์ถ๋ ฅ
# - shell์ ๋ค๋ฅธ unix ๋ช ๋ น์ด๋ค์ ์ ์ด์ ๊ฐ๋จํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ํ ํ๊ฒฝ์ด๋ผ๋ฉด,
# awk๋ record ํ์์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋๋ฐ ๋ชฉ์ ์ ๋๋ ํ๋ก๊ทธ๋จ์ด๋ค
fnm=$1
if [ "$fnm" = "" ]; then echo "$0 <file_name>"; exit; fi
if [ ! -f "$fnm" ]; then echo "\"$fnm\" not exists"; exit; fi
od -v -x $fnm | nawk '
BEGIN { hex="0123456789abcdef"; }
{
printf "%s ",$0;
for(idx=NF+1;idx<10;idx++) printf " ";
for(idx=2;idx<=NF;idx++){
for(pos=1;pos<=3;pos+=2){
val=((index(hex,substr($idx,pos+0,1))-1)*16)+(index(hex,substr($idx,pos+1,1))-1)
if(val>=32&&val<=127){
printf "%c",val;
}else{
printf ".";
}
}
}
printf "\n";
}
'
# ์ถ๋ ฅ ์
0000000 2321 2f75 7372 2f62 696e 2f73 680a 0a66 #!/usr/bin/sh..f
0000020 6e6d 3d24 310a 6966 205b 2022 2466 6e6d nm=$1.if [ "$fnm
0000040 2220 3d20 2222 205d 3b20 7468 656e 2065 " = "" ]; then e
0000060 6368 6f20 2224 3020 3c66 696c 655f 6e61 cho "$0 <file_na
0000100 6d65 3e22 3b20 6578 6974 3b20 6669 0a69 me>"; exit; fi.i
0000120 6620 5b20 2120 2d66 2022 2466 6e6d 2220 f [ ! -f "$fnm"
0000140 5d3b 2074 6865 6e20 6563 686f 2022 5c22 ]; then echo "\"
0000160 2466 6e6d 5c22 206e 6f74 2065 7869 7374 $fnm\" not exist
nawk, awk
# nawk ํ๋ก๊ทธ๋จ์ ๋ค์ํ ์์ ์ ๋๋ค.
# nawk๋ awk์ ํ์ฅ๋ ๋ฒ์ ผ์ผ๋ก function์ด ์ถ๊ฐ ๋์๊ณ ์ฒ๋ฆฌ ํ ์ ์๋ record ํฌ๊ธฐ๊ฐ ํฝ๋๋ค.
##############################
# ๊ธฐ๋ณธ ๊ตฌ์กฐ
# - BEGIN ๊ณผ END๋ ํ์ผ ์ฒ๋ฆฌ ์ ํ์ ์ํ
# - <pattern>
# - ์กฐ๊ฑด์ด ์์ ๊ฒฝ์ฐ ๋ชจ๋ line ์ํ
# - ํ๋์ ๋ผ์ธ์ด ์ฌ๋ฌ ์กฐ๊ฑด์ด ๋ง์ ๊ฒฝ์ฐ ์ฌ๋ฌ๋ฒ ์ฒ๋ฆฌ ๋ ์ ์์ (next; ๋ช ๋ น์ด๋ฅผ ์ฐ๋ฉด ๋ค์ ๋ ์ฝ๋ ์ฒ๋ฆฌ ์ฐธ์กฐ)
nawk '
function
BEGIN { <statement;>
<pattern>
<pattern>
END { <statement;>
'
##############################
# shell ๊ณผ ์ฐ๋
# - wc ๋ ps ๋ฑ ์ผ๋ถ ๋ช ๋ น์ด์ ๊ฒฝ์ฐ ์ถ๋ ฅ์ white space๊ฐ ์๋ค๋ก ๋ถ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
# ๋จ์ง ๊ฐ๋ง ์ํ ๊ฒฝ์ฐ ์ ์ฉํ๊ฒ ์ฌ์ฉ. shell ๋ณ์์ white space ๊ฐ ํฌํจ๋๋ฉด ์ฒ๋ฆฌํ๊ธฐ ๊ท์ฐฎ์
lineno=`wc -l
##############################
# shell์ ๋ณ์ ์ฌ์ฉํ๊ธฐ
# - shell์ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋์ฑ ๊ฐ๋ ฅํ ํ๋ก๊ทธ๋๋ฐ์ด ๊ฐ๋ฅ
# - [']๋ฅผ ["]๋ก, ["] ๋ [\"]๋ก, [$]๋ฅผ [\$]๋ก ๋ฐ๊พธ๊ณ shell ๋ณ์๋ [$var] ํ์์ผ๋ก ํํ
# $var๋ฅผ ๋จ์ ๋์นํ๋ ํ์์ผ๋ก string type์ผ๋ก ์ธ๊ฒฝ์ฐ \"$var\"๋ก ์ ์์ธ๊ฒ~
for fnm in `ls a*`
do
nawk " /$fnm/ { print \"$fnm\",substr(\$6,2,3); } " $fnm
done
##############################
# field ๊ตฌ๋ถ
# - nawk,awk์ ๊ธฐ๋ณธ field ๊ตฌ๋ถ์ while space (space,tab)์ด๋ ๋ค๋ฅธ ๊ตฌ๋ถ์๋ก ๊ตฌ๋ถํ๊ณ ์ ํ ๊ฒฝ์ฐ
# - ์ : /etc/passwd file์์ ":"๋ฅผ ๊ตฌ๋ถ์๋ก ํ ๊ฒฝ์ฐ
nawk -F":" ' {
##############################
# state machine ๋ฐฉ์์ ์ฒ๋ฆฌ
# - ์ ํํ ๋์ง ์์ ํ์ผ์ด๋ pattern์ด ์์๋ ์ ์ฉ (๋ก๊ทธ ๋ฐ result ํ์ผ)
# - ์๋๋ "SQL>"๋ก ์์ํ๋ ๋ผ์ธ์ด ์์๋๊น์ง ๋ผ์ธ์ ๋ฌด์ํ๋ค๊ฐ
๋ค์ ๋ผ์ธ ๋ถํฐ ์ฒ๋ฆฌ. ๋ค์ "SQL>"์ด ๋์ค๋ฉด ์ ๋ ฅ ๋ผ์ธ ๋ฌด์
# - ๊ธ "UNIX Shell ํ๋ก๊ทธ๋๋ฐ (sqlplus,ftp,expr)" ์ฐธ์กฐ
nawk '
BEGIN { mod=0; }
mod==0&&/^SQL>/ { mod=1; next; } # next์ ์ํด ์๋ ๋ถ๋ถ์ ์ํํ์ง ์๊ณ ๋ค์ ๋ผ์ธ์ ์ํ
mod==1&&/^SQL>/ { mod=2; next; }
mod==1 { # mod๊ฐ 1์ผ ๊ฒฝ์ฐ์๋ง ์ํ
if($2=="") printf "%s",$1; else printf " %d %s %5.2f\n",int($1*1000),$2,$3;
next;
}
'
statement
##############################
# statement ๋ชจ์
# - ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ผ ์ด์ธ์๋ pipe ์ ๋ ฅ ๊ฐ๋ฅ
# - c ์ธ์ด์ ๋น์ท
head -200
# ์ฌ์ฉ์ function ์ ์ ํ๊ธฐ
function myfunction() { #nawk๋ง ์ง์
<statement;> # ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณ์๋ global๋ก ์ฌ์ฉ๋จ
return myvalue; # return ์ด ์์ ๊ฒฝ์ฐ ์ผ๋ฐ procedure...
}
{
# ์ฌ์ฉ์ function call ํ๊ธฐ
val=myfunction();
# "." ์ด๋ " "๊ฐ ์ฐ์์ผ๋ก ์์ ๊ฒฝ์ฐ newline์ผ๋ก ์ถ๋ ฅ
gsub("[\.][\.]+","\n",str); # nawk๋ง ์ง์
gsub("[ ][ ]+","\n",str);
printf "%s",str;
# record์ ๋ง์ง๋ง 10๊ฐ field๋ฅผ array์ ์
๋ ฅ
for(idx=NF-9;idx<=NF;idx++) myarray[idx-(NF-9)]=$(idx);
# "A"์์ "D" ์์ฌ์ด์ string ($0 = ์ ์ฒด ๋ผ์ธ)
print substr($0,index($0,"A"),index(substr($0,index($0,"A")),"D")-index($0,"A"));
}
# pattern ์ ์ ๋ณ์ mod๊ฐ 1์ด๊ณ ์ฒซ field๊ฐ "pattern" ์ผ๊ฒฝ์ฐ
mod==1&&$1=="pattern" { <statement;>
# "pattern"์ ํฌํจ ํ ๊ฒฝ์ฐ
/pattern/ { <statement;>
# ๋ผ์ธ์ด "patt"์ผ๋ก ์์ํ๊ฑฐ๋ "tern"์ผ๋ก ๋๋ ๊ฒฝ์ฐ
/^patt/||/tern$/ { <statement;>
background, grouping
ํ๋ก๊ทธ๋จ ๋๋ ํ๋ก์ธ์ค๋ฅผ background๋ก ์คํํ๋ ค๋ฉด ๋ช ๋ น์ด์ ๋ค์
'&' ๊ธฐํธ๋ฅผ ์ด์ฉํ๋ฉด ๋๋๋ฐ, telnet ์ ์์ ๋์ผ๋ฉด background๋ก
์คํ๋๋ ํ๋ก์ธ์ค๊ฐ ๊ฐ์ด ์ฃฝ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
์ด๋ฐํ ๊ฒฝ์ฐ์๋ shell ํ๋ก๊ทธ๋จ ๋ด์์ ์ํ๋ ๋ช ๋ น์ด๋ฅผ background๋ก
์คํํ๊ฒ ํ๊ณ ํด๋น shell ํ๋ก๊ทธ๋จ์ ๋ค์ background๋ก ์คํํ๋ฉด
๊ฐ๋ฅํ ๊ฒฝ์ฐ๊ฐ ์๋ค.
์๋๋ background ์ฒ๋ฆฌ๋ฅผ ์ํ ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ์์ ์๋ฅผ ๊ธฐ์ ํด ๋ณด์๋ค.
์)
. ๋ค์๊ณผ ๊ฐ์ mybackground.sh ํ๋ก๊ทธ๋จ์ด ์์ ๊ฒฝ์ฐ
|
#!/usr/bin/sh cd $i for myfile in * do ~/bin/myprocess.sh $myfile done # ~ = ๋ก๊ทธ์ธ ํ ํด๋๋ฅผ ์๋ฏธํจ |
. ๋จ์ํ๊ฒ background๋ก ์ํ
|
#!/usr/bin/sh
~/bin/mybackground.sh /home/myfolder1 & |
. ๋ณ๋์ mybackground.sh ํ๋ก๊ทธ๋จ์ ์ฐ์ง ์๊ณ ์ฒ๋ฆฌํ๋ ๊ฒฝ์ฐ
|
#!/usr/bin/sh ( cd /home/myfolder1 for myfile in * do ~/bin/myprocess.sh $myfile done ) & # ๊ดํธ๋ฅผ ๋น ์ ธ๋์ค๋ฉด ํ์ฌ ํด๋๋ก ๋ค์ ๋์์ด. # ์ฌ๋ฌ ํด๋๋ฅผ ์ด๋ํ๋ฉด์ ์์ ํ๋ ํ๋ก๊ทธ๋จ์ ๊ฒฝ์ฐ ์ ์ฉ |
. ์ด๋ ค ํด๋๋ฅผ ๋์์ ์ํํ๋ ๊ฒฝ์ฐ
|
#!/usr/bin/sh ~/bin/mybackground.sh /home/myfolder1 & ~/bin/mybackground.sh /home/myfolder2 & ~/bin/mybackground.sh /home/myfolder3 &
# myprocess.sh๊ฐ ๋ฌด๊ฑฐ์ธ ๊ฒฝ์ฐ ์๋ฒ์ ๋ง์ ๋ถํ๋ฅผ ์ค # ๋น ๋ฅธ ์ฒ๋ฆฌ๊ฐ ํ์ํ์ง ์์ ๊ฒฝ์ฐ ๊ถ์ฅํ์ง ์์ |
. ์ฌ๋ฌ ํด๋๋ฅผ ์ฐจ๋ก๋ก ์ํํ๋ ๊ฒฝ์ฐ
|
#!/usr/bin/sh ( ~/bin/mybackground.sh /home/myfolder1 ~/bin/mybackground.sh /home/myfolder2 ~/bin/mybackground.sh /home/myfolder3 ) &
|
for,sed,awk,grep๋ฅผ ์ด์ฉํ์ฌ property ํ์ผ์ ๊ฐ์ ์ผ๊ด ์์ ํ๋ ์์
java ํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ site์ ์ค์น ํด์ผ ํ ์ผ์ด ์์ด ๋ง๋ ํ๋ก๊ทธ๋จ์ด๋ค.
์๋ ํ๋ก๊ทธ๋จ์ ์๋ shell์ ์ด์ฉํ์ฌ java์ properties, xml, ini ํ์ผ
๋ฑ์ ์ผ๊ด์ ์ผ๋ก ๋ฐ๊ฟ์ค๋ค. ์ผ๋จ ์ดํ๋ฆฌ์ผ์ด์
path๋ฅผ ์ผ๊ด์ ์ผ๋ก
๋ณ๊ฒฝํ๋ ์๋ฅผ ๋ค์์ง๋ง ๊ฐ์ ๋ฐฉ์์ผ๋ก ip, db ์ ๋ณด๋ฑ์ ๋ณ๊ฒฝํ ์ ์๋ค.
์๋ ๋ด์ฉ์ ๋ณต์ฌํ์ฌ ์ฌ์ฉ ํ ๋ tab(" ") ์์ esacpe code("^[") ์ฃผ์
-------------------------------------------------------------
#!/usr/bin/sh
############################################
# ํ์ผ ๋ช
: changeproperties.sh
############################################
dir=`dirname $0`
cmd=`basename $0`
opt=$1
ag1=$2
err=""
############################################
# default ์ดํ๋ฆฌ์ผ์ด์
object
############################################
ap_home="/usr/home/application"
############################################
# check parameter & environment
############################################
if [ "$opt" = "" ]; then err="1"; fi
if [ "$opt" = "ap_home" ]; then
if [ "$ag1" = "" ]; then ag1="$ap_home"; fi
fi
if [ "$err" = "1" ]; then
# vt100 ํ๋ฉด control ์ฝ๋ ์ฌ์ฉ. '^['์๋ฅผ vi์์ ์
๋ ฅํ๋ ค๋ฉด <ctrl>-'v'-'['๋ฅผ ์น๋ฉด ๋จ
echo "^[[1m[ USAGE ]^[[0m"
echo ""
echo " ^[[1m$cmd ap_home <path>^[[0m"
echo " . sets/changes ^[[4mAPPLICATION^[[0m home directory"
echo ""
exit 0
fi
############################################
# process command for ap_home
############################################
if [ "$err" = "" -a "$opt" = "ap_home" ]; then
############################################
# ์ผ๋ฐ ํ์ผ์ ๋ณ๊ฒฝํ๋ ์
############################################
for fnm in myfile1.ini mufile2.ini
do
# ๋ณ๊ฒฝํ ๋์ ํ์ผ๋ช
์ ํ๋ฉด์ ์ถ๋ ฅํ๋ ๋ถ๋ถ
echo "^[[4mmyfolder1/$fnm^[[0m"
# '[DIRECTORY]' ์ ํด๋นํ๋ ๊ฐ๋ค๋ง ๋ณ๊ฒฝํ๋๋ก mod ๋ณ์ ์ฌ์ฉ
nawk "
BEGIN { mod=1; }
/^\[DIRECTORY]/ { print \$0; mod=0; next; }
mod==0&&/^gen_out/ { print \"gen_out = $ap_home/myfolder1/gen_out/logs/\"; next; }
mod==0&&/^intp_in/ { print \"intp_in = $ap_home/myfolder1/intp_in/logs/\"; next; }
mod==0&&/^sndbak/ { print \"sndbak = $ap_home/myfolder1/sndbak/\"; next; }
mod==0&&/^MA/ { print \"MA = $ap_home/myfolder1/magreement/\"; next; }
mod==0&&/^IA/ { print \"IA = $ap_home/myfolder1/iagreement/\"; next; }
mod==0&&/^BOARD/ { print \"BOARD = $ap_home/myfolder1/work/dir_board/\"; next; }
mod==0&&/^FTP_LOG/ { print \"FTP_LOG = $ap_home/myfolder/work/server_log/\"; next; }
mod==0&&!/^\[/ { print \$0; next; }
/^\[/ { print \$0; mod++; next; }
{ print \$0; }
" myfolder/$fnm > $fnm.tmp
# ๋ณ๊ฒฝ๋ ๋ด์ญ์ ํ๋ฉด์ ์ถ๋ ฅํ๋ ๋ถ๋ถ (์์ white space๋ฅผ tab 1๊ฐ๋ก ๋ณ๊ฒฝ)
grep $ap_home/myfolder $fnm.tmp | nawk ' { prn=$0; sub("^[ ]*"," ",prn); print prn; }; '
mv $fnm.tmp myfolder/$fnm
done
############################################
# ์ฌ๋ฌ ์์น์ ์๋ jar ํ์ผ ๋ด์ ํ๊ฒฝ ํ์ผ์ ๋ณ๊ฒฝํ๋ ๊ฒฝ์ฐ
############################################
for jnm in myfolder1/myJar1 myfolder1/myJar2 myfolder2/WEB-INF/lib/myJar2
do
# ๋ณ๊ฒฝ ๋์ ํ์ผ ๋ช
์ system.properties ํ์ผ์์ ๋จผ์ ์ฐพ์
jar -xf $jnm.jar system.properties
fnm=""
fnm=`sed -e "s/[ ^M]*//g" system.properties | nawk -F= ' /^SettingFileName=/ { print $2; } '`
if [ "$fnm" != "" ]; then
echo "^[[4m$jnm.jar/$fnm^[[0m"
jar -xf $jnm.jar $fnm
nawk "
/^RevIC/ { print \"RevIC=$ap_home/myfolder/intp_in/\"; next; }
/^SndIC/ { print \"SndIC=$ap_home/myfolder/gen_out/\"; next; }
/^Sam/ { print \"Sam=$ap_home/myfolder/sam/\"; next; }
/^Ic/ { print \"Ic=$ap_home/myfolder/ic/\"; next; }
/^Batch/ { print \"Batch=$ap_home/myfolder/batch/\"; next; }
{ print \$0; }
" $fnm > $fnm.tmp
grep $ap_home/myfolder $fnm.tmp | nawk ' { prn=$0; sub("^[ ]*"," ",prn); print prn; };
mv $fnm.tmp $fnm
jar -uf $jnm.jar $fnm
rm -rf system.properties $fnm
fi
done
fi
------------------------------------------------------------
์๋ฒ ๋ชจ๋ํฐ๋ง
์๋์ ๋ด์ฉ์ ๋ชจ๋ํฐ๋ง ํ ์ ์๋ ๊ฐ๋จํ shell ์คํฌ๋ฆฝํธ ์ ๋๋ค.
ใ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์จ - ์๋ฒ์ ์ข ํฉ์ ์ธ ์ํ
ใ ํ๋ก์ธ์ค ์ํ ๊ฐ์ - ํ๊ท ์์์ ๋ณํ๊ฐ ์ปค์ง๋ฉด ์์คํ ์ ๋จผ๊ฐ๊ฐ ์ผ์ด๋๊ณ ์์
ใ ๋คํธ์ํฌ connection ๊ฐ์ - web ์๋ฒ๋ DB์๋ฒ ์์ ์ฌ์ฉ์ ์ ์ ์ํ ํ์ ๊ฐ๋ฅ
ใ ์ฃผ์ ๋์คํฌ ์ฌ์ฉ์จ - ๋ก๊ทธ๋ก ์ธํ ๋์คํฌ ํ ์ฃผ์!!
|
#!/usr/bin/sh # SOLARIS 10 # prtdiag๋ root์์๋ง ์ํ ๊ฐ๋ฅ. ์ผ๋ฐ user๋ก ์ํดํ๋ ค๋ฉด ๊ฐ์ ๋ช ์
logdir=/log/mylog sysmem=`prtdiag | grep "Memory size:" | awk '{ print $3' ; }'` while : do dat=`date +"%y%m%d"` tme=`date +"%y%m%d%H%M"`
# ํ๋ก์ธ์ค ๊ฐ์ curprc=`ps -e | wc -l | awk ' { print $1; } '`
# ๋คํธ์ํฌ connection ์ curnet=`netstat -n | grep ESTABLISHED | wc -l | awk '{ print $1; } '`
# CPU & Memory vmstat 1 2 | tail -1 | awk " { printf \"$tme CPU %d MEM %d PRC $curprc NET $curnet\\n\", 100-\$NF, 100-((\$5/1024)*100/$sysmem); } >> $logdir/svrmon_$dat.log # DISK ( for curdir in /src /log do df -h $curdir | grep "[0-9]G" | grep "[0-9]%" | awk " { print \"$tme DISK $curdir %s\\n\",\$5; } " done ) >> $logdir/dskmon_$dat.log
sleep 60 done
|
์ ํ๋ก์ธ์ค๋ฅผ background๋ก ์ํ์ํค๊ณ tail -f /log/mylog/... ๋ช ๋ น์ด๋ก ๋ชจ๋ํฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
Oracle ๋ชจ๋ํฐ๋ง
์๋์ ๋ด์ฉ์ ๋ชจ๋ํฐ๋ง ํ ์ ์๋ ๊ฐ๋จํ shell ์คํฌ๋ฆฝํธ ์ ๋๋ค.
ใ LOCK ์ - DB๊ฐ ์ฃฝ์ด๊ฐ๋์ง ํ์ธ ๊ฐ๋ฅ
์๋์ ์์๋ฅผ ํ์ฉํด์ ๋ค๋ฅธ ๋ง์ ๋ชจ๋ํฐ๋ง๋ ๊ฐ๋ฅํ์ง๋ง DBA๊ฐ ์๋
์ ์ฅ์์๋ DB์ ๊ด๋ จ๋์ด ์๋ฒ Load, Transaction Load ๊ณผ LOCK์ด ์์ฌ๊ฐ๋์ง๋ง ํ์ธํ๋ฉด
๋ณด๋ฉด ์ถฉ๋ถ ํ๋ฏํฉ๋๋ค. DB ์๋ฒ ์ํ๋ ์๋ฒ ๋ชจ๋ํฐ๋ง์์ Transaction ๊ด๋ จํด์๋ WAS์์์
Active Data Connection ๊ฐ์๋ฅผ ๋ชจ๋ํฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
|
#!/usr/bin/sh # SOLARIS 10 # Oracle Admin ๊ณ์ ์ผ๋ก ์ํ logdir=/log/mylog
while : do dat=`date +"%y%m%d"` tme=`date +"%y%m%d%H%M"`
( echo "select count(distinct(lk.sid)) from v\$lock lk where lk.type in ('TX','TM','UL');" echo "exit" ) | sqlplus "/as sysdba" | awk " BEGIN { mod=0; } mod==0&&/^COUNT.DISTINCT./ { mod=1; next; } mod==1&&/^--------/ { mod=2; next; } mod==2 { printf \"$tme LOCK %d\\n\", \$1; mod=3; next; } " >> $logdir/dbmod_$dat.log
sleep 60 done |
JEUS ๋ชจ๋ํฐ๋ง
ใ ์ฝํ ์ด๋๋ณ ์ฌ์ฉํ๋ DataSource Connection ์ - ์ฌ์ฉ๋์ด์ง๊ณ ์๋ DB connection ์
ใ ์ฝํ ์ด๋๋ณ ์ฌ์ฉํ๋ Thread ์ - ์ฒ๋ฆฌํ๊ณ ์๋ Transaction ์
์ดํ๋ฆฌ์ผ์ด์ ํ๋ ์ํ์ ๋ฐ๋ผ ์กฐ๊ธ ๋ค๋ฅด๊ฒ ์ง๋ง ์ด Thread ์๋ TPS์ ์ฝ 10์ผ ์์ค์ผ๋ก ๋ํ๋๊ณ
DataSource ์๋ Thread ์์ ๋น์ทํ๊ฒ ๋์ค๋๋ฐ ์ด๋ค ์ ๋ณด๋ฅผ ์ด์ฉํ์ฌ ์ฝํ ์ด๋์ ๊ตฌ์ฑ ๋ณ๊ฒฝ ์ด๋
DBMS์ connection resource ๋ฐ ๋ถํ ์ ํ์ฉ ํ ์ ์์ต๋๋ค.
|
#!/usr/bin/sh logdir=/log/mylog hostnm=`hostname`
tme=`date +"%y%m%d%H%M"` # ja : jeusadmin # dsinfo : Datasource ์ ๋ณด # ti : Thread ์ ๋ณด ( sleep 2 echo "dsinfo -active" sleep 2 echo "ti" sleep 2 echo "exit" ) | ja > $tmp/jeusmon.tmp
# container๋ณ, datasource๋ณ, active ๋ฐ max connection ์ ์ถ๋ ฅ cat $tmp/jeusmon.tmp | /usr/xpg4/bin/grep -e "true" -e "engine container" | /usr/xpg4/bin/awk " /container/ { connme=\$NF; if(\$1==\"Connection\"){ connme=substr(con,12); connme=substr(con,1,length(con)-1); }else{ connme=substr(con,21); connme=substr(con,1,length(con)-1); } connme=toupper(connme); } /true/ { print \"$tme DS=%s ACT=%d MAX=%d\\n\",$connme, \$2, \$8, \$14; } " >> $logdir/jdimon_$dat.log
# container๋ณ active ๋ฐ max thread ์ ์ถ๋ ฅ cat $tmp/jeusmon.tmp | /usr/xpg4/bin/grep -e "\[total :" -e "ContainerName" | /usr/xpg4/bin/awk " BEGIN { prenme=\"\"; idlcnt=0; maxcnt=0; } /ContainerName/ { connme=substr(\$4,length(\"$hostnm\")+2); connme=toupper(connme); if(prenme!=\"\"&&prenme!=connme){ printf \"CON=%s ACT=%d MAX=%d\\n\", prenme, maxcnt-idlcnt,maxcnt; idlcnt=0; maxcnt=0; } prenme=connme; } /total :/ { maxcnt=maxcnt+\$3; idlcnt=idlcnt+\$9; } END { printf \"CON=%s ACT=%d MAX=%d\\n\",prenme, maxcnt-idlcnt,maxcnt; } " >> $logdir/jtimon_$dat.log
sleep 60 done |
๊ฑฐ๋ ๋ด์ฉ์ ๋ชจ๋ํฐ๋งํ๋ ค๋ฉด APM ์ด๋ DB ๋ชจ๋ํฐ๋ง ํด์ด ์์ด์ผ ํ๊ฒ ์ฃ ?
๊ทธ๋ฆฌ๊ณ ๋ชจ๋ํฐ๋ง ๊ด๋ จ ๊ธ์์ ๋ด์ฉ๋ค์ tail -f ๋ก ๋ณด๋ ค๋ฉด ์ ์ฒด ํํฉ ํ์ ์ด ํ๋ญ๋๋ค.
nmon์ด๋ top ๋ช ๋ น์ด์ฒ๋ผ ์ ์ฒด ์ํฉ๋ค์ dashboard ์ฒ๋ผ ํ ํ๋ฉด ๋ด์์ ๋ชจ๋ํฐ๋ง ๋์ ์๋ฒ๋ณ๋ก
๋ชจ๋ํฐ๋ง ํญ๋ชฉ๋ค์ด ํ์ฒ๋ผ ์ถ๋ ฅ ํ ํ์๊ฐ ์์ต๋๋ค.