全球最大的购物网站,南宁市千界网络科技有限公司,网页小游戏网址大全,wordpress 关闭网站脚本任务
监测主机是否联通正常
检查安装操作系统版本是否和需求一致
检查CPU是否满足规格要求
检查内存是否满足规格要求
检查数据磁盘是否满足规格要求
检查操作系统分区目录大小是否满足需求
检查集群主机时间是否一致 0.配置文件准备及脚本变量初始化
编写config.i…脚本任务
监测主机是否联通正常
检查安装操作系统版本是否和需求一致
检查CPU是否满足规格要求
检查内存是否满足规格要求
检查数据磁盘是否满足规格要求
检查操作系统分区目录大小是否满足需求
检查集群主机时间是否一致 0.配置文件准备及脚本变量初始化
编写config.ini存放主机配置文件
[hosts]
10.0.1.10 node01
10.0.1.20 node02
10.0.1.30 node03[root_password]
000000
编写 env-check.sh 取出ip和 密码
#!/bin/bash
#
if [ ! -e ./config.ini ];thenecho config.ini is not exist...please check..EXIT 1
fiHOSTS_IPcat config.ini | sed -n /\[hosts\]/,/\[.*\]/p | grep -v \[.*\] |grep -v ^$ |grep -v ^# |awk {print $1}ROOT_PATHcat config.ini | sed -n /\[root_password\]/,/\[.*\]/p | grep -v \[.*\] |grep -v ^$ |grep -v ^#
1.监测主机是否联通正常
function check_host_online
{echo 监测主机是否联通正常for host in $HOSTS_IP;doping -w 3 $host /dev/nullif [ $? -eq 0 ];thenecho 检测主机 $host 连通性通过elseecho 检测主机 $host 无法连通ping_faild_hosts$ping_faild_hosts $hostfidoneif [[ $ping_faild_hosts ]];thenecho 1.使用ping对主机连通性检查全部通过elseecho 1.使用ping对主机连通性检查未全部通过$ping_faild_hostsexit 1fi
} 循环遍历主机列表通过for循环遍历HOSTS_IP变量中包含的所有主机IP地址。
执行ping命令对每个主机执行ping命令-w 3参数指定ping操作持续3秒 /dev/null将标准输出和标准错误都重定向到/dev/null即不显示ping命令的输出。
检查ping命令的返回值使用$?获取上一个命令即ping命令的退出状态。如果返回值为0-eq 0表示ping命令成功即主机连通性通过。
打印连通性结果如果主机连通性通过则打印检测主机 $host 连通性通过如果不通则打印检测主机 $host 无法连通并将该主机IP添加到ping_faild_hosts变量中用于记录失败的主机。
检查是否有主机未通过连通性检查循环结束后使用if语句检查ping_faild_hosts变量是否为空。如果为空表示所有主机的连通性检查都通过了打印1.使用ping对主机连通性检查全部通过。如果不为空表示有主机未通过连通性检查打印1.使用ping对主机连通性检查未全部通过$ping_faild_hosts并退出脚本返回状态为1。
退出脚本如果检测到有主机连通性失败脚本将通过exit 1命令退出并返回状态码1表示脚本执行失败。
2.检查安装操作系统版本是否和需求一致
先编写检查主机是否能登录
function verify_password
{if [ $# -lt 2 ];thenecho Usage: verify_password IP root_passwordexit 1fisshpass -p$2 ssh -o StrictHostKeyCheckingno -o ConnectTimeout2 root$1 df -h /dev/nullif [ $? -ne 0 ];thenecho 尝试登录ssh主机$1 失败,检查后重试return 255elsereturn 0fi
}编写检查操作系统版本是否一致
grep $OS_VERSION /etc/redhat-release
OS_VERSIONcat config.ini | sed -n /\[os_version\]/,/\[.*\]/p | grep -v \[.*\] |grep -v ^$ |grep -v ^#function check_os_version
{for host in $HOSTS_IP;doverify_password $host $ROOT_PASSif [ $? -eq 0 ];thensshpass -p$ROOT_PASS ssh -o StrictHostKeyCheckingno -o ConnectTimeout2 root$host grep $OS_VERSION /etc/redhat-release /dev/nullif [ $? -ne 0 ];thenecho 检查主机$host 版本与目标不一致,检查不通过os_failed_hosts$os_failed_hosts $hostelseecho 检查主机$host 版本与目标一致,检查通过fielseos_failed_hosts$os_failed_hosts $hostfidoneif [[ $os_failed_hosts ]];thenecho 2.对主机版本检查全部通过elseecho 2.对主机版本检查未全部通过: $os_failed_hostsexit 1fi
}循环遍历主机列表通过for循环遍历HOSTS_IP变量中包含的所有主机IP地址。
验证密码对每个主机调用verify_password函数传入主机IP和root用户的密码$ROOT_PASS以验证SSH连接的密码是否正确。
检查SSH连接如果verify_password函数返回状态码0表示密码验证成功则继续执行否则跳过当前主机。
SSH连接并检查操作系统版本使用sshpass工具和提供的root用户密码通过SSH连接到主机并执行grep命令检查/etc/redhat-release文件中是否包含特定的操作系统版本字符串$OS_VERSION。这里使用了-o StrictHostKeyCheckingno选项来禁用严格的主机密钥检查这在自动化脚本中常用于避免每次连接时的手动确认。
记录检查结果如果操作系统版本检查未通过即grep命令返回非0状态码则打印该主机的检查未通过信息并将主机IP添加到os_failed_hosts变量中如果检查通过则打印该主机的检查通过信息。
汇总检查结果循环结束后使用if语句检查os_failed_hosts变量是否为空。如果为空表示所有主机的操作系统版本检查都通过了打印2.对主机版本检查全部通过。如果不为空表示有主机的操作系统版本检查未通过打印2.对主机版本检查未全部通过$os_faild_hosts并退出脚本返回状态码1。
退出脚本如果检测到有主机操作系统版本不一致脚本将通过exit 1命令退出并返回状态码1表示脚本执行失败。
3.检查CPU是否满足规格要求
cat /proc/cpuinfo |grep ^processor |sort |uniq |wc -l
CPU_COREScat config.ini | sed -n /\[cpu_cores\]/,/\[.*\]/p | grep -v \[.*\] |grep -v ^$ |grep -v ^#
function check_cpu_cores
{for host in $HOSTS_IP;doverify_password $host $ROOT_PASSif [ $? -eq 0 ];thenDST_CPU_CORESsshpass -p$ROOT_PASS ssh -o StrictHostKeyCheckingno -o ConnectTimeout2 root$host cat /proc/cpuinfo |grep ^processor |sort |uniq |wc -l /dev/nullif [ $DST_CPU_CORES -lt $CPU_CORES ];thenecho 检查主机CPU逻辑核心数量,检查不通过cpu_failed_hosts$cpu_failed_hosts $hostelseecho 检查主机CPU逻辑核心数量,检查通过fielsecpu_failed_hosts$cpu_failed_hosts $hostfidoneif [[ $cpu_failed_hosts ]];thenecho 3.对主机cpu检查全部通过elseecho 3.对主机cpu检查未全部通过: $cpu_failed_hostsexit 1fi
4.检查内存是否满足规格要求
cat /proc/meminfo |grep MemTotal| awk {print $2}
TOTAL_MEMORYcat config.ini | sed -n /\[memory_kb\]/,/\[.*\]/p | grep -v \[.*\] |grep -v ^$ |grep -v ^#
function check_memory
{for host in $HOSTS_IP;doverify_password $host $ROOT_PASSif [ $? -eq 0 ];thenDST_TOTAL_MEMORYsshpass -p$ROOT_PASS ssh -o StrictHostKeyCheckingno -o ConnectTimeout2 root$host cat /proc/meminfo |grep MemTotal| awk {print \\$2} /dev/nullif [ $DST_TOTAL_MEMORY -lt $TOTAL_MEMORY ];thenecho 检查主机 $host 内存大小,检查不通过men_failed_hosts$men_failed_hosts $hostelseecho 检查主机 $host 内存大小,检查通过fielsemen_failed_hosts$men_failed_hosts $hostfidoneif [[ $men_failed_hosts ]];thenecho 4.对主机内存检查全部通过elseecho 4.对主机内存检查未全部通过,未通过的主机: $men_failed_hostsfi
}
5.检查数据磁盘是否满足规格要求
function check_disk_number
{for host in $HOSTS_IP;doverify_password $host $ROOT_PASSALL_DISK_SYMBOLSsshpass -p$ROOT_PASS ssh -o StrictHostKeyCheckingno -o ConnectTimeout2 root$host lsscsi |awk \\$2~/disk/{print \\$8} /dev/nullfor d in $ALL_DISK_SYMBOLS;dodf -h | grep $d /dev/nullif [ $? -eq 0 ];thenDATA_DISK_SYMBOLSecho $ALL_DISK_SYMBOLS | sed s#$d##gfidoneDATA_DISK_NUMBERecho $DATA_DISK_SYMBOLS | awk {print NF}if [ $DATA_DISK_NUMBER -ge $NUM_OF_DISK ]; thenecho 检查主机 $host 数据盘个数,检查通过elseecho 检查主机 $host 数据盘个数,检查不通过disk_failed_hosts$disk_failed_hosts $hostfidoneif [[ $disk_failed_hosts ]];thenecho 5.对主机内存检查全部通过elseecho 5.对主机内存检查未全部通过,未通过的主机: $disk_failed_hostsfi}
6.检查操作系统分区目录大小是否满足需求
PARTITION_SIZEcat config.ini | sed -n /\[root_partition_size\]/,/\[.*\]/p | grep -v \[.*\] |grep -v ^$ |grep -v ^#
function check_root_partition_size
{for host in $HOSTS_IP;doverify_password $host $ROOT_PASSif [ $? -eq 0 ];thenROOT_PARTITION_SIZEsshpass -p$ROOT_PASS ssh -o StrictHostKeyCheckingno -o ConnectTimeout2 root$host df -h |awk \\$6\/\{print \\$2} |sed s/[^0-9]//g /dev/nullif [ $ROOT_PARTITION_SIZE -ge $PARTITION_SIZE ]; thenecho 检查主机 $host 分区大小,检查通过elseecho 检查主机 $host 分区大小,检查不通过part_failed_hosts$part_failed_hosts $hostfielsepart_failed_hosts$part_failed_hosts $hostfidoneif [[ $part_failed_hosts ]];thenecho 6.对主机分区大小,全部通过elseecho 6.对主机分区大小,未全部通过,未通过的主机: $part_failed_hostsfi
}
7.检查集群主机时间是否一致
TIME_VALUEcat config.ini | sed -n /\[time_sync_diff\]/,/\[.*\]/p | grep -v \[.*\] |grep -v ^$ |grep -v ^#
function check_time_sync
{for host in $HOSTS_IP;doLOCAL_TIMEdate %Y%m%d%H%M%Sverify_password $host $ROOT_PASSif [ $? -eq 0 ];thenDST_HOST_TIMEsshpass -p$ROOT_PASS ssh -o StrictHostKeyCheckingno -o ConnectTimeout2 root$host date %Y%m%d%H%M%S /dev/nullTIME_DIFFexpr $LOCAL_TIME - $DST_HOST_TIME |sed s/[^0-9]//gif [ $TIME_DIFF -lt $TIME_VALUE ];thenecho 检查主机 $host 时间同步通过elseecho 检查主机 $host 时间同步不通过时间误差在 $TIME_DIFFtime_failed_hosts$time_failed_hosts $hostfielsetime_failed_hosts$time_failed_hosts $hostfidoneif [[ $time_failed_hosts ]];thenecho 7.对主机时间检查,全部通过elseecho 7.对主机时间检查,未全部通过,未通过的主机: $time_failed_hostsfi
}全部代码在这 #!/bin/bash
#
if [ ! -e ./config.ini ];thenecho config.ini is not exist...please check..exit 1
fiHOSTS_IPcat config.ini | sed -n /\[hosts\]/,/\[.*\]/p | grep -v \[.*\] |grep -v ^$ |grep -v ^# |awk {print $1}ROOT_PASScat config.ini | sed -n /\[root_password\]/,/\[.*\]/p | grep -v \[.*\] |grep -v ^$ |grep -v ^#OS_VERSIONcat config.ini | sed -n /\[os_version\]/,/\[.*\]/p | grep -v \[.*\] |grep -v ^$ |grep -v ^#CPU_COREScat config.ini | sed -n /\[cpu_cores\]/,/\[.*\]/p | grep -v \[.*\] |grep -v ^$ |grep -v ^#TOTAL_MEMORYcat config.ini | sed -n /\[memory_kb\]/,/\[.*\]/p | grep -v \[.*\] |grep -v ^$ |grep -v ^#NUM_OF_DISKcat config.ini | sed -n /\[data_disk_number\]/,/\[.*\]/p | grep -v \[.*\] |grep -v ^$ |grep -v ^#PARTITION_SIZEcat config.ini | sed -n /\[root_partition_size\]/,/\[.*\]/p | grep -v \[.*\] |grep -v ^$ |grep -v ^#TIME_VALUEcat config.ini | sed -n /\[time_sync_diff\]/,/\[.*\]/p | grep -v \[.*\] |grep -v ^$ |grep -v ^#if [[ $HOSTS_IP ]];thenecho NO HOST IP ADDRESS is configured in config.please check config.iniexit 1
elseecho the cluster includes the following hosts:for host in $HOSTS_IP; doecho $hostdoneread -p Please confirm,input yes/no: choiceif [[ $choice yes || $choice YES || $choice Y || $choice y ]];thencontinueelseexitfi
fifunction format_print
{if [ $# -lt 1 ]; thenecho Usage: format_print args1 args2...exit 1fifor str in $;doecho $strdone
}function verify_password
{if [ $# -lt 2 ];thenecho Usage: verify_password IP root_passwordexit 1fisshpass -p$2 ssh -o StrictHostKeyCheckingno -o ConnectTimeout2 root$1 df -h /dev/nullif [ $? -ne 0 ];thenecho 尝试登录ssh主机$1 失败,检查后重试return 255elsereturn 0fi
}function check_host_online
{echo 1、检查主机是否联通正常for host in $HOSTS_IP;doping -w 3 $host /dev/nullif [ $? -eq 0 ];thenecho 检测主机 $host 连通性通过elseecho 检测主机 $host 无法连通ping_faild_hosts$ping_faild_hosts $hostfidoneif [[ $ping_faild_hosts ]];thenecho 1.使用ping对主机连通性检查全部通过elseecho 1.使用ping对主机连通性检查未全部通过format_print $ping_faild_hostsfi
}
function check_os_version
{echo 2、检查安装操作系统版本是否和需求一致for host in $HOSTS_IP;doverify_password $host $ROOT_PASSif [ $? -eq 0 ];thensshpass -p$ROOT_PASS ssh -o StrictHostKeyCheckingno -o ConnectTimeout2 root$host grep $OS_VERSION /etc/redhat-release /dev/nullif [ $? -ne 0 ];thenecho 检查主机$host 版本与目标不一致,检查不通过os_failed_hosts$os_failed_hosts $hostelseecho 检查主机$host 版本与目标一致,检查通过fielseos_failed_hosts$os_failed_hosts $hostfidoneif [[ $os_failed_hosts ]];thenecho 2.对主机版本检查全部通过elseecho 2.对主机版本检查未全部通过未通过的主机: format_print $os_failed_hostsfi
}
function check_cpu_cores
{echo 3、检查CPU是否满足规格要求for host in $HOSTS_IP;doverify_password $host $ROOT_PASSif [ $? -eq 0 ];thenDST_CPU_CORESsshpass -p$ROOT_PASS ssh -o StrictHostKeyCheckingno -o ConnectTimeout2 root$host cat /proc/cpuinfo |grep ^processor |sort |uniq |wc -l /dev/nullif [ $DST_CPU_CORES -lt $CPU_CORES ];thenecho 检查主机CPU逻辑核心数量,检查不通过cpu_failed_hosts$cpu_failed_hosts $hostecho $cpu_failed_hostselseecho 检查主机CPU逻辑核心数量,检查通过fielsecpu_failed_hosts$cpu_failed_hosts $hostfidoneif [[ $cpu_failed_hosts ]];thenecho 3.对主机cpu检查全部通过elseecho 3.对主机cpu检查未全部通过未通过的主机: format_print $cpu_failed_hostsfi
}
function check_memory
{echo 4、检查内存是否满足规格要求for host in $HOSTS_IP;doverify_password $host $ROOT_PASSif [ $? -eq 0 ];thenDST_TOTAL_MEMORYsshpass -p$ROOT_PASS ssh -o StrictHostKeyCheckingno -o ConnectTimeout2 root$host cat /proc/meminfo |grep MemTotal| awk {print \\$2} /dev/nullif [ $DST_TOTAL_MEMORY -lt $TOTAL_MEMORY ];thenecho 检查主机 $host 内存大小,检查不通过men_failed_hosts$men_failed_hosts $hostelseecho 检查主机 $host 内存大小,检查通过fielsemen_failed_hosts$men_failed_hosts $hostfidoneif [[ $men_failed_hosts ]];thenecho 4.对主机内存检查全部通过elseecho 4.对主机内存检查未全部通过,未通过的主机:format_print $men_failed_hostsfi
}
function check_disk_number
{echo 5、检查数据磁盘是否满足规格要求for host in $HOSTS_IP;doverify_password $host $ROOT_PASSALL_DISK_SYMBOLSsshpass -p$ROOT_PASS ssh -o StrictHostKeyCheckingno -o ConnectTimeout2 root$host lsscsi |awk \\$2~/disk/{print \\$8} /dev/nullfor d in $ALL_DISK_SYMBOLS;dodf -h | grep $d /dev/nullif [ $? -eq 0 ];thenDATA_DISK_SYMBOLSecho $ALL_DISK_SYMBOLS | sed s#$d##gfidoneDATA_DISK_NUMBERecho $DATA_DISK_SYMBOLS | awk {print NF}if [ $DATA_DISK_NUMBER -ge $NUM_OF_DISK ]; thenecho 检查主机 $host 数据盘个数,检查通过elseecho 检查主机 $host 数据盘个数,检查不通过disk_failed_hosts$disk_failed_hosts $hostfidoneif [[ $disk_failed_hosts ]];thenecho 5.对主机内存检查全部通过elseecho 5.对主机内存检查未全部通过,未通过的主机:format_print $disk_failed_hostsfi}
function check_root_partition_size
{echo 6、检查操作系统分区目录大小是否满足需求for host in $HOSTS_IP;doverify_password $host $ROOT_PASSif [ $? -eq 0 ];thenROOT_PARTITION_SIZEsshpass -p$ROOT_PASS ssh -o StrictHostKeyCheckingno -o ConnectTimeout2 root$host df -h |awk \\$6\/\{print \\$2} |sed s/[^0-9]//g /dev/nullif [ $ROOT_PARTITION_SIZE -ge $PARTITION_SIZE ]; thenecho 检查主机 $host 分区大小,检查通过elseecho 检查主机 $host 分区大小,检查不通过part_failed_hosts$part_failed_hosts $hostfielsepart_failed_hosts$part_failed_hosts $hostfidoneif [[ $part_failed_hosts ]];thenecho 6.对主机分区大小,全部通过elseecho 6.对主机分区大小,未全部通过,未通过的主机:format_print $part_failed_hostsfi}
function check_time_sync
{echo 7、检查集群主机时间是否一致for host in $HOSTS_IP;doLOCAL_TIMEdate %Y%m%d%H%M%Sverify_password $host $ROOT_PASSif [ $? -eq 0 ];thenDST_HOST_TIMEsshpass -p$ROOT_PASS ssh -o StrictHostKeyCheckingno -o ConnectTimeout2 root$host date %Y%m%d%H%M%S /dev/nullTIME_DIFFexpr $LOCAL_TIME - $DST_HOST_TIME |sed s/[^0-9]//gif [ $TIME_DIFF -lt $TIME_VALUE ];thenecho 检查主机 $host 时间同步通过elseecho 检查主机 $host 时间同步不通过时间误差在 $TIME_DIFFtime_failed_hosts$time_failed_hosts $hostfielsetime_failed_hosts$time_failed_hosts $hostfidoneif [[ $time_failed_hosts ]];thenecho 7.对主机时间检查,全部通过elseecho 7.对主机时间检查,未全部通过,未通过的主机: format_print $time_failed_hostsfi
}
check_host_online
check_os_version
check_cpu_cores
check_memory
check_disk_number
check_root_partition_size
check_time_sync