自动化shell脚本编写,自动监控kvm运行状态,异常则强制重启

zhuanbike 2022-12-12 561

使用自动化脚本shell作为监测系统心跳是非常常用的方法。这里玩一个套娃,看看虚拟系统的运行情况。

整个shell脚本如下:

#设置变量,注意awk是对返回值按条件切取,使用两次awk是为了切取第三列第二行的内容。

state=`virsh list |awk '{print $3}'`
states=`echo $state|awk '{print $2}'`
if [ "$states"x = "running"x ];then
    echo "系统正常"
else
     echo "系统异常"
#执行相关命令
     virsh reset x86
fi

下面我对这个脚本进行注释,首先我们呀了解echo的意义,跟php的echo不同,echo内是可以执行的。


echo命令用于在shell中打印shell变量的值,或者直接输出指定的字符串。

在 echo 函数中,可以同时输出多个字符串,而在 print 函数中则只可以同时输出一个字符串。同时,echo函数并不需要圆括号,所以echo函数更像是语句而不像是函数。

echo 和 print 都不是函数,而是语言结构,所以圆括号都不是必需的。他们的区别在于:

(1) echo可以输出多个字符串,像下面这样:

echo 'a','b','c';

如果你非要加上圆括号,注意写成echo ('a','b','c');是错误的,应该写成:

echo ('a'),('b'),('c');

它没有像函数的行为,所以不能用于函数的上下文

(2) print只能输出一个字符串,它可以表现得像一个函数,比如你可以如下使用:
$ret = print 'Hello World';
所有它能用在更复杂的表达式中。

另外,echo的效率相对比较快~

awk '{print $3}'
#代表前面那个第三列文字。

改良后的自动化脚本,通过监控虚拟环境网络状态,来按需强制重启虚拟环境。

#!/bin/env sh
status_code=$(curl -s -o /dev/null -w "%{http_code}" -X GET "http://192.168.0.106:8080")
if [[ $status_code == 200 ]]; then
    echo "success"
else
    virsh reset x86
fi

基于设备情况的改良版,假如设备根本不联网,重启也没用,首选要确定百度是通的,然后自己网站打不开的情况,才需要重启。

#!/bin/env sh
webcode=$(curl -s -o /dev/null -w "%{http_code}" -X GET "http://www.baidu.com")
selfcode=$(curl -s -o /dev/null -w "%{http_code}" -X GET "http://192.168.0.106:8080")
if [ $selfcode != 200 ]&&[ $webcode = 200 ]; then
    virsh reset x86
else
   echo "pass"
fi

进一步优化版

webcode=$(curl -s -o /dev/null -w "%{http_code}" http://www.baidu.com)
selfcode=$(curl -s -o /dev/null -w "%{http_code}" http://192.168.0.107:8080)
if [ $selfcode != 200 ]&&[ $webcode = 200 ]; then
    virsh reset x86
fi


介绍版

#!/bin/env sh
webcode=$(curl -s -o /dev/null -w "%{http_code}" -X GET "http://www.baidu.com")
selfcode=$(curl -s -o /dev/null -w "%{http_code}" -X GET "http://192.168.0.107:8080")
if [ $selfcode != 200 ]&&[ $webcode = 200 ]; then
    # 执行相应的自修复命令
else
   echo "系统运行正常"
fi


最新回复 (1)
  • zhuanbike 2023-1-29
    0 引用 2
    简化版  200代码获取

    curl -s -o /dev/null -w "%{http_code}" http://xxx.xxx.xxx
发新帖