|
本帖最后由 linji 于 2011-12-12 00:54 编辑
希望能够修改成适用于LUM的脚本。
该脚本用于监控VPS服务器负载,Web程序内存及CPU使用。当服务器系统负载或内存使用达到预设值,则重启该程序,或者某个php-cgi进程占用CPU过大,则直接kill掉该进程。目的在于缓解服务器资源耗尽导致意外宕机等情况。
https://gist.github.com/1216837
已经有高手修改成功,详细请看
sys-mon.rar
(2.15 KB, 下载次数: 3122)
使用时,根据自己的情况修改以下几处地方。
# 测试站点是否正常运行的url
MY_URL="http://xxxx/"
# 指定当前使用的服务器网卡
NETWORK_CARD="eth0"
# 通知邮件地址
EMAIL="xxx@139.com"
#发送方式 0:系统mail 1:第三方代发
SENDMAIL_TYPE="0";
1.vi /var/script/sys-mon.sh
2.点键盘i键
3.粘贴脚本内容(见帖子下方)
4.点击ESC
5.输入:wq 回车
6.chmod +x /home/monitor.sh
7.设置每分钟执行一次
crontab -e
* * * * * /var/script/sys-mon.sh
vi /usr/local/LuNamp/cmd/crontab_cmd.sh
* * * * * /var/script/sys-mon.sh - #! /bin/bash
- #====================================================================
- # sys-mon.sh
- #
- # Copyright (c) 2011, WangYan <webmaster@wangyan.org>
- # All rights reserved.
- # Distributed under the GNU General Public License, version 3.0.
- #
- # Monitor system mem and load, if too high, restart some service.
- #
- # See: https://wangyan.org/blog/sys-mon-shell-script.html
- #
- # V 2, since 2011-09-14
- #====================================================================
- # Need to monitor the service name
- NAME_LIST="php-fpm mysql nginx"
- # Single process to allow the maximum CPU (%)
- PID_CPU_MAX="20"
- # The maximum allowed memory (%)
- SYS_MEM_MAX="90"
- # The maximum allowed system load
- SYS_LOAD_MAX="5"
- # Log path settings
- LOG_PATH="/var/log/autoreboot.log"
- # Date time format setting
- DATA_TIME=$(date +"%y-%m-%d %H:%M:%S")
- # Your email address
- EMAIL="webmaster@wangyan.org"
- # Your website url
- MY_URL="https://wangyan.org/blog"
- #====================================================================
- for NAME in $NAME_LIST
- do
- SYS_CPU_SUM="0";SYS_MEM_SUM="0"
- PID_LIST=`ps aux | grep $NAME | grep -v root`
- IFS_TMP="$IFS";IFS=
- \n'
- for PID in $PID_LIST
- do
- PID_NUM=`echo $PID | awk '{print $2}'`
- PID_CPU=`echo $PID | awk '{print $3}'`
- PID_MEM=`echo $PID | awk '{print $4}'`
- # echo $NAME: $PID_NUM $PID_CPU $PID_MEM
- # SYS_CPU_SUM=`echo $SYS_CPU_SUM + $PID_CPU | bc`
- SYS_MEM_SUM=`echo $SYS_MEM_SUM + $PID_MEM | bc`
- if [[ "$NAME" = "php-fpm" && "$PID_CPU" > "$PID_CPU_MAX" ]];then
- echo "$DATA_TIME kill $PID_NUM successful (CPU:$PID_CPU)" | tee -a $LOG_PATH
- kill $PID_NUM
- fi
- done
- IFS="$IFS_TMP"
- SYS_LOAD=`uptime | awk '{print $(NF-2)}' | sed 's/,//'`
- MEM_COMPARE=`awk 'BEGIN{print('$SYS_MEM_SUM'>'$SYS_MEM_MAX')}'`
- LOAD_COMPARE=`awk 'BEGIN{print('$SYS_LOAD'>'$SYS_LOAD_MAX')}'`
- # echo -e "$NAME: CPU_SUM:$SYS_CPU_SUM MEM_SUM:$SYS_MEM_SUM SYS_LOAD:$SYS_LOAD\n"
- for ((i=0;i<3;i++))
- do
- STATUS_CODE=`curl -o /dev/null -s -w %{http_code} $MY_URL`
- if [ "$STATUS_CODE" = "200" ];then
- break
- fi
- done
- if [[ "$MEM_COMPARE" = "1" || "$LOAD_COMPARE" = "1" || "$STATUS_CODE" = "502" ]];then
- /etc/init.d/$NAME stop
- if [ "$?" = "0" ];then
- echo "$DATA_TIME Stop $NAME successful (MEM:$SYS_MEM_SUM CPU:$SYS_CPU_SUM LOAD:$SYS_LOAD)" | tee -a $LOG_PATH
- else
- echo "$DATA_TIME Stop $NAME [failed] (MEM:$SYS_MEM_SUM CPU:$SYS_CPU_SUM LOAD:$SYS_LOAD)" | tee -a $LOG_PATH
- sleep 3
- pkill $NAME
- fi
- /etc/init.d/$NAME start
- if [ "$?" = "0" ];then
- echo "$DATA_TIME Start $NAME successful" | tee -a $LOG_PATH
- else
- echo "$DATA_TIME Start $NAME [failed]" | tee -a $LOG_PATH
- echo "$DATA_TIME Start $NAME failed" | mail -s "Start $NAME failed" $EMAIL
- fi
- fi
- done
复制代码
|
|