핸드폰 또는 태블릿으로 내 서버 상태가 이상없는지 웹브라우저에서 Ping으로 확인할 수 있도록 프로그램을 짜 보았다.

<?php
$now=date("Y-m-d-H:i:s");
$host=array(
        '공인IP' => 'hostname',
        '공인IP' => 'hostname'
);

foreach($host as $ip => $hostname) {

$str = exec("ping -c 2 $ip");
if ($result == 0){
  echo "$ip ping <font size=5> succeeded</font> - $hostname <br />";
}else{
  echo "$ip ping <font size=5; color=red>failed</font> - $hostname <br />";
}
}

echo("<br /> <font size=14> update time : $now </font> <br />");
?>

테스트 결과 ping count가 2이상이고 등록한 서버IP가 많다면 웹 브라우저 출력시 시간이 다소 걸리니
이점 참고해야 됩니다.

Posted by 박물지

CPU 사용량 스크립트와 같이 메모리 부하가 일어났을 때,
어떤 프로세스가 메모리 사용이 많았는지 메일 발송이 되는 스크립트입니다.

#!/bin/bash
s_time=$(date +%Y-%m-%d' '%H:%M:%S)

while true; do

#memory usage
TOTAL=`free | awk '/^Mem:/    { printf( "%s\n", $2 ); }'`
USED=`free | awk '/^Mem:/    { printf( "%s\n", $3 ); }'`
FREE=`free | awk '/^Mem:/    { printf( "%s\n", $4 ); }'`
BUFFERS=`free | awk '/^Mem:/    { printf( "%s\n", $6 ); }'`
CACHED=`free | awk '/^Mem:/    { printf( "%s\n", $7 ); }'`

#cat /proc/meminfo | egrep 'MemTotal|MemFree|Buffers|Cached' | grep -v 'SwapCached' | awk '{print $2}' > $TMP_DIR/memory.$$

usage=$(expr $FREE + $BUFFERS + $CACHED)
used=`expr $TOTAL - $FREE - $BUFFERS - $CACHED`
#mem_usage=`echo "$used / $TOTAL * 100"|bc -l`
#mem_usage=$(echo "scale=2; $used/$TOTAL*100"|bc -l)
let "mem_usage=$used*100/$TOTAL"

if [ "$mem_usage" -ge 90 ]; then
 Process=`/bin/ps -eo pmem,pcpu,rss,vsize,args | /bin/sort -k 1 -r | /usr/bin/head -n 20`
 echo -e "$(hostname) as on $s_time \n $Process\n" | mail -s "Alert: Almost out of memory space $mem_usage%" root@test.com
fi

  # Wait before checking again.
  sleep 300

done

Posted by 박물지

CPU 사용량 체크 명령어는 top ,vmstat,sar 등등 많은 것이 있지만
CPU 부하가 일어났을 때, 어떤 프로세스때문인지는 알 수가 없다..따라서 필자는 아래와 같이 CPU부하가 일어났을 때, CPU부하가 높은 순서를 메일로 발송되도록 스크립트를 작성해 보았다.

<cpu-usage.sh>

#!/bin/bash
s_time=$(date +%Y-%m-%d' '%H:%M:%S)
PREV_TOTAL=0
PREV_USER=0

while true; do
#CPU 전체 사용량을 cat으로 추출한다.
  CPU=(`cat /proc/stat | grep '^cpu '`) # Get the total CPU statistics.
  unset CPU[0]                          # Discard the "cpu" prefix.
  USER=${CPU[1]}                        # Get the idle CPU time.

  # Calculate the total CPU time.
  TOTAL=0
  for VALUE in "${CPU[@]}"; do
    let "TOTAL=$TOTAL+$VALUE"
  done


  # Calculate the CPU usage since we last checked.
  let "DIFF_USER=$USER-$PREV_USER"
  let "DIFF_TOTAL=$TOTAL-$PREV_TOTAL"
  let "DIFF_USAGE=$DIFF_USER*100/$DIFF_TOTAL"
  #echo -en "CPU: $DIFF_USAGE%  \n"

  # Remember the total and idle CPU times for the next check.
  PREV_TOTAL="$TOTAL"
  PREV_USER="$USER"


  if [ "$DIFF_USAGE" -ge 20 ]; then
  #Process=`/bin/ps -eo pmem,pcpu,rss,vsize,args | /bin/sort -k 2 -r | /usr/bin/head -n 20`
#cpu부하가 일어났을 때, 어떤 프로세스때문에 부하가 일어났는지 프로세스 상태를 메일로 발송해 준다.
  Process=`/bin/ps -eo ppid,user,bsdstart,bsdtime,%mem,%cpu,args --sort=-%cpu | /usr/bin/head -n 20`
  echo -e "$(hostname) as on $s_time \n $Process\n" | mail -s "Alert: Almost out of cpu usage $DIFF_USAGE%" root@test.com
  fi

  # Wait before checking again.(5분마다 해당 스크립트가 작동하도록 300초 설정)
  sleep 300
done

위와 같이 스크립트를 작성하였다면, 백그라운드에서 해당 스크립트가 작동되록 설정해 준다.

#백그라운드 실행
sh <root directory>/cpu-usage.sh &

#프로세스가 잘 운영되고 있는지 확인
ps -ef | grep cpu

#stress 설치 및 부하 테스트

stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 400s

Site : http://weather.ou.edu/~apw/projects/stress/

1. 설치
# wget http://weather.ou.edu/~apw/projects/stress/stress-1.0.4.tar.gz
# tar xvfz stress-1.0.4.tar.gz
# cd stress-1.0.4
# ./configure
# make && make install


2. 실행
# stress
`stress' imposes certain types of compute stress on your system

Usage: stress [OPTION [ARG]] ...
-?, --help show this help statement
--version show version statement
-v, --verbose be verbose
-q, --quiet be quiet
-n, --dry-run show what would have been done
-t, --timeout N timeout after N seconds
--backoff N wait factor of N microseconds before work starts
-c, --cpu N spawn N workers spinning on sqrt()
-i, --io N spawn N workers spinning on sync()
-m, --vm N spawn N workers spinning on malloc()/free()
--vm-bytes B malloc B bytes per vm worker (default is 256MB)
--vm-stride B touch a byte every B bytes (default is 4096)
--vm-hang N sleep N secs before free (default none, 0 is inf)
--vm-keep redirty memory instead of freeing and reallocating
-d, --hdd N spawn N workers spinning on write()/unlink()
--hdd-bytes B write B bytes per hdd worker (default is 1GB)

Example: stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 10s

Note: Numbers may be suffixed with s,m,h,d,y (time) or B,K,M,G (size).

 

Posted by 박물지
Posted by 박물지

출처 : http://happybruce.tistory.com

쉘 스크립트를 만들때,  가장 첫 라인에 #!/bin/bash 를 왜 써야 하는지에 대하여 알아 보도록 하겠습니다.

쉘 스크립트의 가장 첫 라인에  !/bain/bash 를 쓰게 됨으로 해서, 내가 사용 하려는 명령어 해석기가 bash 쉘 임을 미리 알려주는 것입니다. 일반적으로 스크립트에서 #는 주석기호이지만, 첫 라인의 #!/bin/bash 에서의 #은 주석기호가 아닙니다.

스크립트의 가장 첫 라인에 있는 #! 은 스크립트의 제일 앞에서 이 파일이 어떤 명령어 해석기의 명령어 집합인지를 시스템에게 알려주는 역할을 합니다.

#! 은 두 바이트의 "매직넘버"("magic number")로서, 실행 가능한 쉘 스크립트라는 것을 나타내는 특별한 표시자 입니다.

#! 바로 뒤에 나오는 것은 경로명으로, 스크립트에 들어있는 명령어들을 해석할 프로그램의 위치를 나타내는데 그 프로그램이 쉘인지, 프로그램 언어인지, 유틸리티인지를 나타냅니다. 이 명령어 해석기가 주석은 무시하면서 스크립트의 첫 번째 줄부터 명령어들을 실행시킵니다.

거의 대부분의 상업용 유닉스 및 리눅스 에서 기본 본쉘인 #!/bin/sh을 쓰면 비록 Bash 만 가지고 있는 몇몇 기능들을 못 쓰게 되겠지만 리눅스가 아닌 다른 머신에 쉽게 포팅 할 수 있게 해 줍니다. (이렇게 작성된 스크립트는 POSIX sh 표준을 따르게 됩니다. )
"#!" 뒤에 나오는 경로는 정확히 Full PATH를 기록 해야 합니다.

만약 PATH를 잘못 적게 되면, 스크립트를 돌렸을 때 거의 대부분 "Command not found"라는 에러 메세지만 보게 될 것입니다.

이상으로 쉘 스크립트 처음에 왜 "#!/bin/bash"를 반드시 써야만 하는지에 대하여 알아 보았습니다.

 

'기초 Linux 서버관리 > shell프로그래밍' 카테고리의 다른 글

메모리 사용량 스크립트  (0) 2012.02.06
CPU 사용량 쉘 스크립트  (0) 2012.02.06
쉘프로그래밍 유용한 사이트 모음  (0) 2012.01.31
df 옵션  (0) 2012.01.27
Posted by 박물지

VolGroup으로  구성되어 있을 때, df -h명령어로 보면 아래와 같이  출력값이 오버가 된다.



평상시에는 상관없지만 , disk 사용량을 shellscript 로 구성할 때는 출력값을 제대로 못 가져올 경우가 있다.
따라서 df -hP 옵션을 주면 출력값은 오버되지 않고 한 줄로 출력된다.


이렇게 출력 되면 disk usage shellscript 짤 때, 쉽게 Use% 값을 구할 수 있다.

<참고 : disk usage script>

#!/bin/bash
s_time=$(date +%Y-%m-%d' '%H:%M:%S)
df -HP | grep -vE '^Filesystem'|awk '{print $5 " " $1 " " $6}' | while read output;
do
  echo $output
  usage=$(echo $output | cut -d'%' -f1  )
  partition=$(echo $output | awk '{ print $2 " " $3 }' )
  if [ $usage -ge 95 ]; then
    echo "Running out of space \"$partition ($usage%)\" on $(hostname) as on $s_time" |
     mail -s "Alert: Almost out of disk space $usage%" root@test.com
  fi
done

Posted by 박물지
기초 Linux 서버관리2011. 12. 1. 18:49


Mysql 운영시에 필요한 툴들을 정리해 보았습니다. 유용한 툴이니 적용해보고 유용하다고 생각되는 거 실서버에 적용하여 효율적인 업무에 도움이 되세요.
 


maatkit : master/master 장비의 replication에 유용한 툴이고, 테이블 동기화와 관련된 툴임 
mysqlreport : Mysql 서버의 통계 정보를 보는데 도움을 주는 툴임
querysniffer (querybench/queryparser) : 로깅 정보를 통해 mysql서버의 리스타트 없이 쿼리 정보를 볼 수 있음
mysqlsla :  쿼리 분석 도구(응답시간이 긴 쿼리 분석에 용이)
mysqlidchck : Mysql 서버에 사용되지 않는 인덱스 정보 제공
innodb-recovery : InnoDB tablespaces를 사용중이라면 손상된 데이터를 복구해 줌
Dstat : 실시간으로 Mysql정보를 제공

Posted by 박물지
기초 Linux 서버관리2011. 12. 1. 16:33


#yum install dstat
Loading "installonlyn" plugin
Setting up Install Process
Setting up repositories
Reading repository metadata in from local files
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Package dstat.noarch 0:0.6.6-3.el5_4.1 set to be updated
--> Running transaction check

Dependencies Resolved

=============================================================================
 Package                 Arch       Version          Repository        Size
=============================================================================
Installing:
 dstat                   noarch     0.6.6-3.el5_4.1  base              106 k

Transaction Summary
=============================================================================
Install      1 Package(s)        
Update       0 Package(s)        
Remove       0 Package(s)        

Total download size: 106 k
Is this ok [y/N]: y
Downloading Packages:
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing: dstat                        ######################### [1/1]
error: unpacking of archive failed on file /usr/bin/dstat;4ed72809: cpio: open

Installed: dstat.noarch 0:0.6.6-3.el5_4.1
Complete!

※complete가 나왔지만, error: unpacking of archive failed on file /usr/bin/dstat;4ed72809: cpio: open 발생되어
패키지 설치가 안되었다. 이런 경우는 /usr/bin 디렉토리가 속성 잠금 상태일 것이다.

확인해 보자.
#lsattr /usr/ | more

----i-----I-- /usr/bin
역시 잠금상태이다.
#chattr -i /usr/bin 잠금 해제
#lsattr /usr/ | more
----------I-- /usr/bin

다시 한번, yum install

# yum install dstat
Loading "installonlyn" plugin
Setting up Install Process
Setting up repositories
Reading repository metadata in from local files
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Package dstat.noarch 0:0.6.6-3.el5_4.1 set to be updated
--> Running transaction check

Dependencies Resolved

=============================================================================
 Package                 Arch       Version          Repository        Size
=============================================================================
Installing:
 dstat                   noarch     0.6.6-3.el5_4.1  base              106 k

Transaction Summary
=============================================================================
Install      1 Package(s)        
Update       0 Package(s)        
Remove       0 Package(s)        

Total download size: 106 k
Is this ok [y/N]: y
Downloading Packages:
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing: dstat                        ######################### [1/1]

Installed: dstat.noarch 0:0.6.6-3.el5_4.1
Complete!

error: unpacking of archive failed on file /usr/bin/dstat;4ed72809: cpio: open 에러 없이
정상적으로 complete 되었다.

Posted by 박물지
기초 Linux 서버관리2011. 7. 12. 07:42


Internet Explorer 를 사용하십니까? 그렇담 위에 이미지가 보이십니까?
안보이신다구요? 그럼 firefox 로도 이 페이지를 열어보시죠.. 이미지가 보일 겁니다.

이 문제로 고민하기를 이틀..
결국 문제는 IE 의 경우 CMYK 모드로 저장된 이미지 파일을 표시하지 못 한다는 결론에 도달했습니다.
웹에 올리는 이미지는 RGB 모드로 저장합시다 (For dumbest IE...).

참고 URL: http://sunhwan.tistory.com/entry/%EC%9D%B4%EB%AF%B8%EC%A7%80%EA%B0%80-Internet-Explorer-%EC%97%90%EC%84%9C%EB%A7%8C-%EC%95%88-%EB%B3%B4%EC%9D%B4%EB%8A%94-%EA%B2%BD%EC%9A%B0
Posted by 박물지
라이프2011. 6. 2. 17:51


제가 아는 동생 첫 작품입니다.
잘 봐주세요~

'라이프' 카테고리의 다른 글

<생활 속 지식>주유구 위치가 헷갈릴 때는...  (0) 2011.03.15
Posted by 박물지