编辑代码

#!/bin/bash

run_command() {
    "$@"                   # 运行传递给函数的命令
    local status=$?        # 保存命令的退出状态码
    if [ $status -eq 0 ]; then
        echo "命令 \"$@\" 执行成功。"
    else
        echo "命令 \"$@\" 失败,退出状态码为 $status。"
        exit $status        # 退出脚本并返回命令的退出状态码
    fi
}

# 检查是否已经重启过服务器
if [ -f /tmp/reboot_marker ]; then
    echo "服务器已重启过..."
    
    # 检查是否存在.ssh文件夹
    if [ -d ~/.ssh ]; then
        echo "存在.ssh文件夹,正在删除..."
        run_command rm -r ~/.ssh
        echo ".ssh文件夹已删除。"
    fi
    
    # 执行ssh localhost命令,并在需要输入密码时输入"123456"
    echo "正在执行ssh localhost命令..."
    run_command ssh localhost <<EOF
    yes
    123456
    123456
EOF  
    #切换目录
    run_command cd ./.ssh
    #执行创造密钥指令
    run_command ssh-keygen -t rsa
    #将公钥发送给cdh01,并在需要输入密码时输入"123456"
    run_command ssh-copy-id cdh01 <<EOF
    yes
    123456
    123456
EOF
    #jdk的安装
    
    #HTPP的安装
    
    #判断该主机是否为主节点,需要执行哪些命令

    # 获取主机名
    host_name=$(hostname)
    # 获取IP地址(假设为eth0接口的IP)
    ip_address=$(ip addr show eth0 | awk '/inet / {print $2}' | cut -d/ -f1)
    
    # 指定的主机名和IP
    specified_host="cdh01"
    specified_ip="172.21.32.25"
    
    # 判断是否同时满足指定的主机名和IP
    if [ "$host_name" == "$specified_host" ] && [ "$ip_address" == "$specified_ip" ]; then
        echo "该节点为主节点"
        # 在这里添加指令A
    else
        echo "该节点为从节点"
        # 在这里添加指令B
    fi
    
else
    echo "服务器未重启过..."
    # 设置hostname
    new_hostname="cdh01"
    echo "设置主机名为 $new_hostname"
    run_command sudo hostnamectl set-hostname $new_hostname
    
    # 向hosts文件末尾添加内容
    run_command echo "172.21.32.25  cdh01" >> /etc/hosts
    run_command echo "172.21.32.26  cdh02" >> /etc/hosts
    run_command echo "172.21.32.27  cdh03" >> /etc/hosts
    
    # 关闭SELinux(仅在SELinux为enforcing时执行)
    selinux_status=$(sestatus | awk '/SELinux status:/ {print $3}')
    if [ "$selinux_status" == "enabled" ]; then
        echo "正在关闭SELinux..."
        run_command setenforce 0
        run_command sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
        echo "已禁用SELinux。"
    else
        echo "SELinux已处于关闭状态,无需执行任何操作。"
    fi
    
    # 关闭防火墙并禁止开机自启动
    echo "正在关闭防火墙..."
    run_command systemctl stop firewalld
    run_command systemctl disable firewalld
    echo "防火墙已关闭并禁止开机自启动。"
    
    #禁用hugepage
    run_command echo never > /sys/kernel/mm/transparent_hugepage/defrag
    run_command echo never > /sys/kernel/mm/transparent_hugepage/enabled	
    run_command echo 'echo never > /sys/kernel/mm/transparent_hugepage/defrag' >> /etc/rc.local
    run_command echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.local
    
    #修改swappiness=0
    run_command echo 'vm.swappiness=0' >> /etc/sysctl.conf
    
    #调整limits参数
    run_command echo "* soft nofile 655350" >> /etc/security/limits.conf 
    run_command echo "* hard nofile 655350" >> /etc/security/limits.conf
    run_command echo "* soft core unlimited" >> /etc/security/limits.conf
    run_command echo "* hard core unlimited" >> /etc/security/limits.conf
    
    # 提示用户重新启动以使更改生效
    read -p "更改将在重新启动后生效。现在重启吗?(y/n):" choice
    if [[ $choice == "y" || $choice == "Y" ]]; then
        run_command touch /tmp/reboot_marker  #创建一个reboot_marker检查是否重启
        run_command reboot
    else
        echo "请记住在更改生效前重新启动您的系统。"
    fi
fi