hadoop机器集群关机脚本
由于在学习hadoop时,关闭机器非常的麻烦,所以我搞了个脚本方便我能够更快的关闭机器。
1.创建.sh文件并编写脚本
[root@hadoop11 ~]# cd /home/bin
[root@hadoop11 bin]# vim shutdown_cluster.sh
#!/bin/bash
# 定义要关机的机器列表
MACHINES=("hadoop12" "hadoop13" "hadoop14")
# 定义日志文件路径
LOG_FILE="/home/shutdown.log"
# 函数:记录日志
log_action() {
local machine_name="$1"
local result="$2"
local timestamp=$(date +"%Y年%m月%d日%H时%M分%S秒")
echo "$machine_name,日期:$timestamp,$result" >> "$LOG_FILE"
}
# 函数:执行关机操作并记录日志
perform_shutdown() {
local machine_name="$1"
local timestamp=$(date +"%Y年%m月%d日%H时%M分%S秒") # 引入timestamp变量
log_action "$machine_name" "开始关机"
# 使用timeout来控制SSH连接和关机操作的超时,并将命令置于后台
timeout 1 ssh -q "$machine_name" "sudo shutdown -h now" &
local ssh_pid=$!
# 立即执行后续代码,不等待timeout的完成
# 可以添加其他需要在关机期间执行的命令
# 在这里执行其他操作...
# 使用wait命令等待timeout的完成
wait $ssh_pid
local exit_status=$? # 将exit_status在这里声明并初始化
if [ $exit_status -eq 0 ]; then
log_action "$machine_name" "关机成功"
echo "$machine_name,关机完成"
else
if [ $exit_status -eq 124 ]; then
log_action "$machine_name" "SSH连接超时"
echo "$machine_name,关机失败:SSH连接超时"
else
log_action "$machine_name" "关机可能成功,需查看确认"
echo "$machine_name,关机可能成功,需查看确认"
fi
fi
}
# 检查日志文件是否存在,不存在则创建
if [ ! -f "$LOG_FILE" ]; then
touch "$LOG_FILE"
fi
# 遍历机器列表,并关机每台机器
for MACHINE in "${MACHINES[@]}"; do
perform_shutdown "$MACHINE"
done
# 本地关机
log_action "本机" "开始关机"
timestamp=$(date +"%Y年%m月%d日%H时%M分%S秒") # 更新timestamp变量
echo "$machine_name,关机完成"
# 使用timeout来控制本地关机操作的超时,并将命令置于后台
timeout 1 sudo shutdown -h now &
#local shutdown_pid=$!
# 在下面执行其他本机关机前的操作:
# 下面这个一般在本机关机后是运行不了的,日志不会做记录
if [ $? -eq 0 ]; then
log_action "本机" "关机成功"
echo "本机,关机完成"
else
if [ $? -eq 124 ]; then
log_action "本机" "SSH连接超时"
echo "本机,关机失败:SSH连接超时"
else
log_action "本机" "关机可能成功,需查看确认"
echo "本机,关机可能成功,需查看确认"
fi
fi
# 使用wait命令等待本机关机的完成
wait $shutdown_pid
# 本机关机后的操作...
代码还有些bug,但不影响使用
:wq
2.赋权给shutdown_cluster.sh文件
[root@hadoop11 bin]# chmod +x /home/bin/shutdown_cluster.sh
3.创建日志文件
[root@hadoop11 bin]# vim /home/shutdown.log
创建后直接退出
:q
4.赋权给日志文件
[root@hadoop11 bin]# chmod 777 /home/shutdown.log
5.建立软链接my_stop
[root@hadoop11 bin]# ln -s /home/bin/shutdown_cluster.sh /usr/local/bin/my_stop
6.运行脚本
[root@hadoop11 bin]# my_stop