天天看點

Shell腳本檢查memcache程序并自己主動重新啟動

修正版:

#!/bin/sh

#check memcache process and restart if down

mm_bin="/usr/local/bin/memcached"

mm_log="/home/xxx/memcached_check.log"

mm_ports=("11211" "11212")

mm_param=("-d -m 20480 -p 11211 -u www" "-d -m 256 -p 11212 -u www")

mm_count=${#mm_ports[@]}

t=$(date -d "today" +"%Y-%m-%d %H:%M:%S")

i=0

while [ $i -lt $mm_count ]

do

mm_exists=`ps -ef|grep "memcached"|grep "${mm_ports[$i]}"|grep -v grep|wc -l`

if [ "$mm_exists" == "0" ]; then

${mm_bin} ${mm_param[$i]} 2>&1 > /dev/null &

echo "${t} : ${mm_bin} ${mm_param[$i]}" >> ${mm_log}

fi

let i++

done

===============================================================

加入為自己主動運作:

    #crontab -e

*/10 * * * * /bin/sh /home/xxx/memcached_check.sh

系統每10分鐘會自己主動運作memcached_check.sh

-------------------------------------------------------------

備用shell語句:

#檢查mysql狀态

PORT=`netstat -na | grep "LISTEN" | grep "3306" | awk '{print $4}' | awk -F. '{print $2}'`

if [ "$PORT" -eq "3306" ]

#檢查mysql占CPU負載

mysql_cpu=`top -U root -b -n 1 | grep mysql | awk '{print $10}'|awk -F. '{print $1}'`

#假設mysql cpu負載大于80,則重新啟動mysql

if [ "$mysql_cpu" -ge "80" ]

#獲得相關資訊

ps -ef|grep "memcached"|grep -v "grep"|wc -l

ps -ef|grep "memcached"|grep "11211"|grep -v "grep"|wc -l

ps aux|grep "memcached"|grep -v "grep"|awk '{sum+=$4;n++};END{print sum}'

ps aux|grep "memcached"|grep -v "grep"|awk '{printf $1}'

MYPORT=`netstat -na|grep "tcp"|grep "3306"|awk -F[:" "]+ '{print $5}'`

HAPORT=`netstat -na|grep "udp"|grep "694"|awk -F[:" "]+ '{print $5}'`

PING=`ping -c 5 www.linuxtone.org|awk -F, '/packets/{print $3}'|cut -c 2-|awk '{print $1}'`

DB1IP=`ifconfig eth0|awk '/inet/{print $2}'|cut -c 6-`

----------------------------------------------------------------------------

shell if語句的一些資料:

–b 當file存在而且是塊檔案時傳回真

-c 當file存在而且是字元檔案時傳回真

-d 當pathname存在而且是一個檔案夾時傳回真

-e 當pathname指定的檔案或檔案夾存在時傳回真

-f 當file存在而且是正規檔案時傳回真

-g 當由pathname指定的檔案或檔案夾存在而且設定了SGID位時傳回為真

-h 當file存在而且是符号連結檔案時傳回真,該選項在一些老系統上無效

-k 當由pathname指定的檔案或檔案夾存在而且設定了“粘滞”位時傳回真

-p 當file存在而且是指令管道時傳回為真

-r 當由pathname指定的檔案或檔案夾存在而且可讀時傳回為真

-s 當file存在檔案大小大于0時傳回真

-u 當由pathname指定的檔案或檔案夾存在而且設定了SUID位時傳回真

-w 當由pathname指定的檔案或檔案夾存在而且可運作時傳回真。一個檔案夾為了它的内容被訪問必定是可運作的。

-o 當由pathname指定的檔案或檔案夾存在而且被子目前程序的有效使用者ID所指定的使用者擁有時傳回真。

UNIX Shell 裡面比較字元寫法:

-eq 等于

-ne 不等于

-gt 大于

-lt 小于

-le 小于等于

-ge 大于等于

-z 空串

= 兩個字元相等

!= 兩個字元不等

-n 非空串

------------------------------------------------------------

crontab 的一些資料:

基本格式:

*  *  *  *  *  command

分  時 日  月  周  指令

第1清單示分鐘1~59 每分鐘用 * 或 */1 表示,*/10表示每10分鐘

第2清單示小時1~23(0表示0點)

第3清單示日期1~31

第4清單示月份1~12

第5列辨別号星期0~6(0表示星期天)

本文轉自mfrbuaa部落格園部落格,原文連結:http://www.cnblogs.com/mfrbuaa/p/5096025.html,如需轉載請自行聯系原作者