目录
站点可用性检测
检测前奏
实验目的
利用crontab来判断web服务器是否可用,如果不可用,则自动启动,并且将过程中的操作写到日志文件中
至于这个怎么看web服务器是否可用,咱们就用xampp试试看, 刚开始有防火墙的存在,所以哪怕
opt/lampp/lampp status
是打开的,但是依旧无法访问,我们也不能就这么把防火墙关掉,所以我们可以选择开放这个http端口,即 80/tcp 这个端口
一个站点如果无法访问,肯能有两个原因:
1.Web服务器没有正常启动:那么如何使用shell进行判断?
使用curl直接访问网页,如果成功,则 判断 $? 是否为0,为0表示打开了xampp服务,不为0表示没有打开服务(此时需要在脚本中设置开启服务的指令)
据此我们可以发现,使用curl是否可以正常访问是与web服务器是否打开有关
在本机上开启xampp服务的同时curl是不受防火墙的影响的,但是在本机上开启xampp服务,换一台主机进行curl就会受到本机的防火墙影响
2.防火墙没有允许80端口通过:让shell执行 firewall-cmd 添加端口通过的命令即可
使用 netstat -ant | prep :80 进行查询,如果端口被打开,则查看 $? 是否为0 ,为0表示成功启动80端口 使用 firewall-cmd --list-port | grep :80,情况和上面一样 使用 ps -ef 查询对应的进程 firewall-cmd --add-port 80/tcp
也正是因为这两个原因,所以我们的本次实验中,设定的定时任务就是这两个。完成上述特征识别后,在shell中编写脚本,并让cron定时执行
我们来看看 netstat -ant | grep :80
中的 ant 分别代表什么意思
-a的结果就是像这些英文字母表示的结果
-an的结果就是将上面的英文字母转换成ip地址
-ant的结果就是选择出于tcp链接有关有关的端口
实验执行
第一步:
确定crontab服务正常开启(必要条件下不要留下没用的服务)
第二步:
编写脚本
curl http://192.168.230.147/dashboard/ > dev/null if [ $? -ne 0 ]; then #此时说明是xampp自身的服务没有启动,如果是防火墙的问题我们会在下面考虑的 /opt/lampp/lampp start echo "检测到lampp 没有启动,已自动开启 - "`date "+%Y-%m-%d %H:%M:%S"` >> /opt/learn/site_check.log fi firewall-cmd --list-port | grep :80 if [ $? -ne 0 ]; then firewall-cmd --add-port=80/tcp echo "检测到80端口没有通过,已自动通过 - "`date "+%Y-%m-%d %H:%M:%S"` >> /opt/learn/site_check.log fi
注意。有邮件内容是这样的,是正确的,没有错
我这里有一个问题,在开启了xampp但是没有开启防火墙80端口的前提下,我的curl也是无法访问的,导致此时的 $? 结果也不为0,那么此时匹配进入第一个if会去开启xampp服务,但问题是此时xampp服务是已经打开的情况。总的来说curl访问不了的原因是因为防火墙的问题,但是却误判成了xampp服务没有打开的问题
所以我觉得应该把端口判断和服务判断调换一下位置
firewall-cmd --list-port | grep :80 if [ $? -ne 0 ]; then firewall-cmd --add-port=80/tcp echo "检测到80端口没有通过,已自动通过 - "`date "+%Y-%m-%d %H:%M:%S"` >> /opt/learn/site_check.log fi curl http://192.168.230.147/dashboard/ > dev/null if [ $? -ne 0 ]; then #此时说明是xampp自身的服务没有启动,如果是防火墙的问题我们会在下面考虑的 /opt/lampp/lampp start echo "检测到lampp 没有启动,已自动开启 - "`date "+%Y-%m-%d %H:%M:%S"` >> /opt/learn/site_check.log fi