》》》》》魏红斌带你学shell脚本《《《《《
更多shell脚本学习点击个人主页
作为一个资深程序猿,我将带领您从零开始,一步步踏上运维之旅,无论您是否拥有现成的服务器,都将学会如何轻松购买、部署,并通过编写及应用精心设计的Shell脚本,解决实际工作中遇到的问题。这些脚本不仅源自真实的业务场景,经历了反复实践与严格测试,确保了其简洁高效、易于理解且便于使用。更重要的是,我们将全程免费分享,并深度解析背后原理,助您深入理解并灵活运用,每一款脚本均经过真实业务场景的反复打磨与严格测试,秉持着简洁高效、易于理解和使用的理念设计,无偿提供并且提供相关解析过程,让读者能更深入了解相关内容。
无服务器的朋友们:
让我们先从选购并部署服务器开始。只需简单三步,即可拥有您的专属云服务器:
- 访问ECS官网:点击链接直达阿里云ECS网站:ECS选择网址。这是您获取高质量云服务器的第一站。
- 选择并购买:在琳琅满目的服务器配置中,挑选符合您需求的那一款,一键下单,完成支付。整个过程犹如在线购物般便捷。
- 进入ECS控制台:支付成功后,您将被引导至ECS管理控制台。在这里,您可以全面掌控您的服务器资源,后续的所有运维操作都将在此展开。
已有服务器的朋友们:
如果您已拥有ECS实例,那么请直接登录ECS管理控制台。在左侧导航栏中,依次选择“实例与镜像” > “实例”,确保您已定位到目标资源所在的资源组和地域。接下来,在实例列表中找到待连接的实例,点击操作列下的“远程连接”,选择“通过Workbench远程连接”并点击“立即登录”。
登录实例:
无论是新购还是已有服务器,接下来都需要进行实例登录。这里支持多种认证方式,以最常见的“密码认证”为例:
- 输入用户名(通常为
root
或ecs-user
)。 - 接着,输入登录密码。如果您忘记了密码,无需担忧,您可以在ECS实例详情页面查询,或者通过“更改密码”功能进行修改。
编写与运行Shell脚本:
成功登录后,您将看到一个熟悉的命令行界面——这就是您的运维主战场。现在,键入vim test.sh
,我们便进入了文本编辑模式,准备创建第一个Shell脚本。
按下键盘上的i
键,进入插入模式,此刻您可以自由地复制粘贴今天要学习的脚本代码,粘贴后按ecs
后,按:wq
保存脚本,可以用./ test.sh
或者sh test.sh
进行脚本执行。
今天我们要学习的脚本是(脚本内容直接复制粘贴即可):
#!/bin/bash 2# 监控 HTTP 服务器的状态(测试返回码) 3# 设置变量,url为你需要检测的目标网站的网址(IP 或域名),比如百度 4url="http://183.232.231.172/index.html" 5 6# 定义函数 check_http: 7# 使用 curl 命令检查 http 服务器的状态 8check_http() { 9 status_code=$(curl -m 5 -s -o /dev/null -w %{http_code} "$url") 10} 11 12while : 13do 14 check_http 15 16 date=$(date +%Y%m%d-%H:%M:%S) 17 18 # 生成报警邮件的内容 19 echo -e "当前时间为:$date\n$url 服务器异常,状态码为${status_code}.\n请尽快排查异常." > /tmp/http$$.pid 20 21 # 根据返回码决定是发送邮件报警还是将正常信息写入日志 22 if [ "$status_code" -ne 200 ]; then 23 mail -s "Warning: HTTP Status Not 200" root < /tmp/http$$.pid 24 else 25 echo "$date - $url 连接正常" >> /var/log/http_monitor.log 26 fi 27 28 # 确保临时文件被清理 29 rm -f /tmp/http$$.pid 30 31 sleep 5 32done
- 初始化变量:
url
变量存储了要检查的HTTP服务器地址。
- 定义函数
check_http
:
- 使用
curl
命令检查URL的HTTP状态码。这里-m 5
指定了请求超时时间为5秒,-s
表示静默模式不输出进度信息,-o /dev/null
是将响应体丢弃,-w %{http_code}
则只输出HTTP状态码。 - 执行
check_http
后,HTTP响应的状态码会被赋值给status_code
变量。
- 无限循环(
while :
):
- 脚本进入一个无限循环,不断执行监控任务。
- 获取当前日期时间:
- 使用
date
命令获取当前的日期和时间,并格式化为YYYYmmdd-HH:MM:SS
形式,存于date
变量中。
- 生成报警邮件内容:
- 根据当前时间、URL和状态码生成一段文本信息,如果状态码非200,则认为服务器异常,这段信息会被写入一个临时文件
/tmp/http$$.pid
中。其中$$
代表当前shell进程的PID,用于确保文件名的唯一性。
- 判断并采取行动:
- 如果
status_code
不等于200,使用mail
命令发送报警邮件给root
用户,邮件主题为“Warning: HTTP Status Not 200”,内容来自之前创建的临时文件。 - 如果状态码为200,则在日志文件
/var/log/http_monitor.log
中追加一条记录,说明连接正常。
- 清理临时文件:
- 使用
rm -f
命令删除上一步中创建的临时文件,避免积累无用文件。
- 延时执行:
- 通过
sleep 5
命令让脚本暂停5秒后再进行下一次检查,防止过于频繁的请求对目标服务器造成不必要的负担。
综上所述,此脚本设计用于定期检查指定HTTP服务器的健康状态,并在发现异常时自动发送邮件报警,同时维护一份正常运行的日志记录。
如果想上手操作练代码的同学们可以通过阿里云ecs服务器免费试用参与!
入口:新老同学免费试用