作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
我们前面学习了那么多命令,以及涉及到部分逻辑判断的问题。从简单来说,他就是Shell编程,只有由于命令比较单一,只能实现比较简单的功能。如果我们把多个操作都放到一起去,并添加更复杂的逻辑在里面,他就是Shell编程。所以我们主要从以下几个方面讲解Shell编程:
Shell编程-什么是shell
Shell编程-变量
Shell编程-数据类型
Shell编程-逻辑判断
Shell编程-if判断
Shell编程-if和else
Shell编程-while循环
Shell编程-for循环
Shell编程-case
Shell编程-break
Shell编程-continue
Shell编程--函数
Shell编程-案例(一)(本章节)
Shell编程-案例(二)
Shell编程-小结
通过前面多个小节的讲解,我们的Shell编程的基本功能都已经讲完了,后面两小节将通过4个案例来讲解Shell的实际用途。
备份MySQL数据库
在我们日常运维中,定期备份数据库,是一个很好的习惯。我们就以此为需求,来书写我们的备份脚本。
#!/bin/bash
# 设置备份目录
BACKUP_DIR="/home/backup"
# 获取当前日期
DATE=$(date +%Y-%m-%d)
# 检查备份目录是否存在,如果存在则退出
if [ -d "$BACKUP_DIR/$DATE" ]; then
echo "备份目录已存在,放弃此次备份。"
exit 0
fi
# 创建当天的备份目录
mkdir -p "$BACKUP_DIR/$DATE"
# 获取所有数据库列表
DATABASES=$(mysql -uroot -e "SHOW DATABASES;" | tr -d "| " | grep -v Database)
# 遍历每个数据库进行备份
for DATABASE in $DATABASES; do
echo "正在备份数据库:$DATABASE"
mysqldump -uroot $DATABASE > "$BACKUP_DIR/$DATE/${DATABASE}_${DATE}.sql"
done
echo "备份完成。"
脚本解释
注:这个备份脚本是把mysql的密码写入了本地配置的,所以没有密码选项。
检查运行的服务
我们的Linux服务器需要运行服务,但是如果服务中途出现异常异常以后,怎么把它自动拉起呢?我们今天这个脚本就以zookeeper这个服务来为作为需要监测的对象。
#!/bin/bash
# Zookeeper 服务地址和端口
ZK_SERVER="localhost 2181"
# 日志文件路径
LOG_FILE="/tmp/zookeeper_check.log"
# 检查 Zookeeper 状态
echo "Checking Zookeeper status..."
status=$(echo ruok | nc $ZK_SERVER | grep -i imok)
current_time=$(date +"%Y-%m-%d %H:%M:%S")
if [ -n "$status" ]; then
echo "[$current_time] Zookeeper is running properly." | tee -a $LOG_FILE
else
echo "[$current_time] Zookeeper is not running or in an abnormal state. Attempting to restart..." | tee -a $LOG_FILE
# 重启 Zookeeper 的命令,根据实际情况修改
/home/apache-zookeeper-3.8.4-bin/bin/zkServer.sh start
if [ $? -eq 0 ]; then
echo "[$current_time] Zookeeper restarted successfully." | tee -a $LOG_FILE
else
echo "[$current_time] Failed to restart Zookeeper." | tee -a $LOG_FILE
fi
fi
脚本解释
1.还是首先定义了2个变量,一个是需要检查的zk地址,另外一个是检查日志输出路径。
2.通过zookeeper的四字命令,检查zk的状态,然后把这个zk的状态值传给一个变量。
3.再次定义了一个当前时间的变量,用于后面输出到日志里面打印时间。
4.通过一个if判断,判断zk的状态是否满足预期,如果满足预期,则说明zk是正在运行中,并将日志输出到日志里面
5.如果不满足预期,则说明zk未运行,就执行启动zk服务。
6.再次判断启动启动命令的执行情况,无论结果如何都输出到日志里面。
总结