修正版: #!/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表示星期天) (责任编辑:IT) |