Chrony时间同步组件一键安装配置脚本 适用centos、redhat7.x-8.x、rocky8.x、openEuler 20.x-22.x

这篇文章介绍了一个bash脚本,用于检测Linux系统中NTP服务的存在,移除ntpdate定时任务,管理Chrony服务,确保与NTP服务的兼容性,包括安装、配置和重启Chrony服务。脚本适用于Centos、Rocky和openEuler等发行版。
摘要由CSDN通过智能技术生成

 更新日志:

2024/04/20

由于NTP服务与Chrony服务存在冲突,新增检测系统是否存在NTP服务

2024/04/09

新增检测是否存在使用ntpdate同步时间的定时任务,如有则删除

#!/bin/bash
#
############################## 蜈蚣出品 #############################
# Function : modi chronyd service                                   #
# Platform : Centos6.x - Centos8.x & Rocky8.x & openEuler 20.x-22.x #
# Version  : 1.2                                                    #
# Date     : 2024-04-20                                             #     
#####################################################################
#
#
clear
export LANG="en_US.UTF-8"
date_time=$(date +%Y%m%d-%H%M%S)
OLD_IFS=$IFS
IFS=$' '

#输出信息颜色
color_0="\033[0m"
color_R="\033[31m"
color_G="\033[32m"
color_Y="\033[33m"
color_C="\033[36m"

#请根据需要修改NTP服务器列表,使用空格分隔 <---请修改------请修改------请修改------请修改------请修改------请修改------
ntp_server="10.34.12.7 10.34.12.6"

#判断是否root用户
if [ $(id -u) != "0" ] ; then
	echo -e "\n"
	echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "当前用户为普通用户,必须使用root用户运行,脚本退出. . ."
	sleep 0.25
	echo -e "\n"
	exit
fi

modichrony_start()
{
	echo -e "\n"
	if [[ -e /etc/redhat-release ]] || [[ -e /etc/openEuler-release ]] || [[ -e /etc/hce-release ]] ; then
		if [ -e /etc/redhat-release ] ; then
			redhat_version=`cat /etc/redhat-release | sed -r 's/.* ([0-9]+)\..*/\1/'`
		fi
		if [ -e /etc/openEuler-release ] ; then
			openeuler_version=`cat /etc/openEuler-release | sed -r 's/.* ([0-9]+)\..*/\1/'`
		fi
		if [ -e /etc/hce-release ] ; then
			hce_version=`cat /etc/hce-release | sed -r 's/.* ([0-9]+)\..*/\1/'`
		fi
	else
		echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "当前操作系统可能不被支持,脚本退出. . ."
		sleep 0.25
		echo -e "\n"
		exit
	fi
}

crontab_check()
{
	echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在检查是否存在使用ntpdate同步时间的定时任务. . ."
	crontab -l 2>/dev/null | grep "ntpdate" >/dev/null 2>&1
	if [ $? -eq 0 ] ; then
		echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在备份ntpdate同步时间的定时任务到/tmp/crontabntp.bak. . ."
		crontab -l 2>/dev/null | grep 'ntpdate' > /tmp/crontabntp.bak
		sleep 0.25
		echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在删除ntpdate同步时间的定时任务. . ."
		crontab -l 2>/dev/null | grep -v 'ntpdate' | crontab - >/dev/null 2>&1
		if [ $? -eq 0 ] ; then
			echo -e `date +%Y-%m-%d_%H:%M:%S` $color_G"SUCCESS"$color_0 "删除ntpdate同步时间的定时任务完成. . ."
			sleep 0.25
		fi
	fi
}

ntpd_check()
{
	echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在检查系统是否存在NTP服务. . ."
	service ntpd status 2>/dev/null | grep -P "is.*running|active.*running" >/dev/null 2>&1
	if [ $? -eq 0 ] ; then
		while true
		do
			echo -ne `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "系统已存在NTP时间同步服务,是否关停NTP服务. . .(Y/N)"
			read CHOICE
			case $CHOICE in
				[yY][eE][sS]|[yY])
					echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在关停NTP服务. . ."
					service ntpd stop >/dev/null 2>&1
					chkconfig ntpd off >/dev/null 2>&1
					sleep 0.25
					break
					;;
				[nN][oO]|[nN])
					echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "不关停NTP服务将与Chrony服务冲突,脚本退出. . ."
					exit
					;;
				*)
					echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "输入错误,请重新输入. . ."
					;;
			esac
		done
	fi
}

chrony_check()
{
	echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在检查Chrony服务是否已安装. . ."
	rpm -qa | grep -P "^chrony-" >/dev/null 2>&1
	if [ $? -ne 0 ] ; then
		echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在使用yum安装Chrony服务. . ."
		yum -y install chrony >/dev/null 2>&1
		if [ $? -eq 0 ] ; then
			echo -e `date +%Y-%m-%d_%H:%M:%S` $color_G"SUCCESS"$color_0 "Chrony服务安装完成. . ."
			sleep 0.25
		else
			echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "Chrony服务安装失败,脚本退出. . ."
			sleep 0.25
			exit
		fi
	fi
	#判断chrony服务是否开启
	echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在检查Chrony服务是否已启动. . ."
	service chronyd status 2>/dev/null | grep -P "is.*running|active.*running" >/dev/null 2>&1
	if [ $? -ne 0 ] ; then
		echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在启动Chrony服务. . ."
		sleep 0.25
		chkconfig chronyd on >/dev/null 2>&1
		service chronyd start >/dev/null 2>&1
		service chronyd status 2>/dev/null | grep -P "is.*running|active.*running" >/dev/null 2>&1
		if [ $? -eq 0 ] ; then
			echo -e `date +%Y-%m-%d_%H:%M:%S` $color_G"SUCCESS"$color_0 "Chrony服务启动完成. . ."
			sleep 0.25
		else
			echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "Chrony服务启动失败,脚本退出. . ."
			sleep 0.25
			exit
		fi
	fi
}

modichrony_main()
{
	echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在备份Chrony配置文件. . ."
	\cp -rfL /etc/chrony.conf /etc/chrony.conf.$date_time.bak >/dev/null 2>&1
	sleep 0.25
	echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在注释Chrony配置文件原有NTP服务器信息. . ."
	grep -P "^\s*server" /etc/chrony.conf >/dev/null 2>&1
	if [ $? -eq 0 ] ; then
		sed -i "/^\s*server/ s/^\s*//" /etc/chrony.conf
		sed -i "/^\s*server/ s/^\(.*\)$/#\1/g" /etc/chrony.conf
	fi
	grep -P "^\s*pool" /etc/chrony.conf >/dev/null 2>&1
	if [ $? -eq 0 ] ; then
		sed -i "/^\s*pool/ s/^\s*//" /etc/chrony.conf
		sed -i "/^\s*pool/ s/^\(.*\)$/#\1/g" /etc/chrony.conf
	fi
	grep -P "^\s*peer" /etc/chrony.conf >/dev/null 2>&1
	if [ $? -eq 0 ] ; then
		sed -i "/^\s*peer/ s/^\s*//" /etc/chrony.conf
		sed -i "/^\s*peer/ s/^\(.*\)$/#\1/g" /etc/chrony.conf
	fi
	sed -i "1 s/^/\n/" /etc/chrony.conf
	for ntp_server_i in $ntp_server ; do
		echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在增加NTP服务器"$color_C"$ntp_server_i"$color_0"到配置文件. . ."
		sed -i "1 s/^/server $ntp_server_i iburst\n/" /etc/chrony.conf
		sleep 0.25
	done
	sed -i "1 s/^/# 以下是 NTP 时间服务器列表\n/" /etc/chrony.conf
}

modichrony_end()
{
	echo -e `date +%Y-%m-%d_%H:%M:%S` $color_Y"INFO"$color_0 "正在重启Chrony服务. . ."
	service chronyd restart >/dev/null 2>&1
	service chronyd status 2>/dev/null | grep -P "is.*running|active.*running" >/dev/null 2>&1
	if [ $? -eq 0 ] ; then
		echo -e `date +%Y-%m-%d_%H:%M:%S` $color_G"SUCCESS"$color_0 "Chrony服务重启完成. . ."
		sleep 0.25
	else
		echo -e `date +%Y-%m-%d_%H:%M:%S` $color_R"ERROR"$color_0 "Chrony服务重启失败,脚本退出. . ."
		sleep 0.25
		exit
	fi

	IFS=$OLD_IFS
	echo -e "\n"
}

modichrony_start
crontab_check
ntpd_check
chrony_check
modichrony_main
modichrony_end

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值