更新日志:
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