linux 调整服务器时间 ntp

新建sh脚本文件

vim checkTime.sh

进入.sh文件目录下,执行sh命令

#授权

chmod +x checkTime.sh

 #检查脚本是否有问题

sh -x checkTime.sh

 执行命令是 ./checkTime.sh 就是 ./ 加上你想执行的shell脚本

 

#!/bin/bash
# NTP网络时间校正脚本
#NTP服务器列表
ntpServer=(
#洲际空间服务器
[0]=asia.pool.ntp.org
#清华大学
[1]=s1e.time.edu.cn
#腾讯云NTP时间服务器
[2]=ntp1.tencent.com
#腾讯云NTP时间服务器
[3]=ntp.tencent.com
#腾讯云NTP时间服务器
[4]=ntp2.tencent.com
#Internet 空间服务器
[5]=2.pool.ntp.org
#Internet 空间服务器
[6]=0.pool.ntp.org
#国家服务器-中国
[7]=cn.pool.ntp.org
#中国
[8]=cn.ntp.org.cn
#苹果
[9]=time.asia.apple.com
#优质
[10]=time.nist.gov
#优质
[11]=ntp.nict.jp
#东北大学
[12]=ntp.neu.edu.cn
[13]=http://www.bt.cn/api/index/get_time
)
# 时间同步服务器
time_server="s1e.time.edu.cn"
# 时区设置
timezone="Asia/Shanghai"
# 检查ntp服务是否安装
if ! rpm -qa | grep ntp > /dev/null; then
if command -v yum > /dev/null; then
yum install ntp -y
elif command -v apt-get > /dev/null; then
apt-get install -y ntp
else
echo "找不到安装包,需手动安装ntp"
exit 1
fi
fi

#校验
serverNum=${#ntpServer[@]}
NUM=0
for (( i=0; i<$serverNum; i++ )); do
echo -e "\e[1;32m[|-正在尝试从${ntpServer[$NUM]}同步时间...]\e[0m\n"
/usr/sbin/ntpdate -u ${ntpServer[$NUM]} >> /dev/null 2>&1
status=$?
if [ "${ntpServer[$NUM]}" = "http://www.bt.cn/api/index/get_time" ]; then
getBtTime=$(curl -sS --connect-timeout 3 -m 60 ${ntpServer[$NUM]})
if [ "$getBtTime" ]; then
date -s "$(date -d @$getBtTime +"%Y-%m-%d %H:%M:%S")"
echo -e "\e[1;32m\t\t\t\t\t[|-NTP服务器${ntpServer[$NUM]}时间同步成功!]\e[0m"
break
else
echo -e "\e[1;31m\t\t\t\t\t[|-NTP服务器${ntpServer[$NUM]}时间同步失败!]\e[0m"
NUM=$((NUM+1))
fi
else
if [ $status -eq 0 ]; then
time_server=${ntpServer[$NUM]}
echo -e "\e[1;32m\t\t\t\t\t[|-NTP服务器${ntpServer[$NUM]}时间同步成功!]\e[0m"
break
else
echo -e "\e[1;31m\t\t\t\t\t[|-NTP服务器${ntpServer[$NUM]}时间同步失败!]\e[0m"
NUM=$((NUM+1))
fi
fi
sleep 2
done

# 修改ntp配置文件
sed -i 's/^#\(ntp\)/\1/' /etc/ntp.conf
sed -i '/^server/d' /etc/ntp.conf
echo "server $time_server iburst" >> /etc/ntp.conf
# 重启ntp服务
if command -v systemctl &> /dev/null; then
systemctl restart ntpd.service || service ntp restart
else
service ntp restart
fi
# 设置系统时区
timedatectl set-timezone $timezone
echo -e "\e[1;32m[|-正在尝试将当前系统时间写入硬件..]\e[0m\n"
#hwclock --systohc与hwclock -w,它们在功能上是相同的,都用于将系统时间写入硬件时钟。两者之间的唯一区别在于命令的长短格式。
hwclock -w
sleep 3
#查看硬件时
echo -e "\e[1;32m[|-当前硬件时间为..]\e[0m\n"
hwclock --show
# 查看ntp服务器同步结果
echo -e "\e[1;32m[|-当前ntp服务器同步结果为..]\e[0m\n"
ntpq -p
# 获取当前日期和时间
current_datetime=$(date "+%Y-%m-%d %H:%M:%S")
echo -e "\e[1;32m\t\t\t\t\t[|-同步后时间$current_datetime]\e[0m"
echo -e "\e[1;32m\t\t\t\t\t[|-时间同步完成!]\e[0m"

 

定时执行脚本

设置crontab定时任务:使用`crontab -e`命令编辑当前用户的crontab文件。

 添加定时任务配置:在crontab文件中,每行表示一个定时任务。以每天定时运行为例,你可以添加类似以下的配置:

```shell
5 10 * * * /gds/checkTime.sh

 

 

 

vim start_cron.sh

 

#!/bin/bash
# start_cron.sh

# 启动计划任务
# 判断crond服务是否已经启动
if ps -ef | grep -v grep | grep crond >/dev/null; then
echo "crond已经启动"
sudo systemctl restart crond
else
echo "crond未启动"
sudo systemctl restart start
fi

# 添加到开机启动项
echo "添加到开机启动项"
chkconfig crond on
sleep 2
echo "验证是否已添加到启动项"
systemctl is-enabled crond

 

#授权

chmod +x start_cron.sh

 #检查脚本是否有问题

sh -x start_cron.sh

 执行命令是 ./start_cron.sh 就是 ./ 加上你想执行的shell脚本

常用的命令:

crontab -l   查看所有正在运行的所有crontab命令

crontab -r : 删除目前的时程表

crontab file [-u user]-用指定的文件替代目前的crontab

ps –ef|grep crontab 查看crontab是否已经启动

 

crond服务

/sbin/service crond start # 启动服务
/sbin/service crond stop # 关闭服务
/sbin/service crond restart # 重启服务
/sbin/service crond reload # 重新载入配置

 

2.crontab服务启动与关闭。
/etc/init.d/crond stop --关闭服务
/etc/init.d/crond start --启动服务
/etc/init.d/crond restart --重启服务
/etc/init.d/crond reload --重新载入配置

 

 

`/etc/init.d`和`/sbin/service`都是用于启动和管理系统服务的工具。它们的差异在于操作系统和发行版的不同。

`/etc/init.d`是传统的系统服务启动脚本目录,在许多Linux发行版中都存在。你可以在该目录下找到各个服务的启动脚本,可以使用直接调用脚本的方式来启动、停止、重启或查看服务状态。

例如,使用`/etc/init.d/crond start`命令可以启动`crond`服务,其中`/etc/init.d/crond`是`crond`服务的启动脚本路径。

`/sbin/service`是一个更高级的管理服务的工具,它提供了一个更简洁的命令接口,使服务的管理更加方便。该工具实际上是一个脚本,它会查找并调用`/etc/init.d`目录下对应的服务启动脚本。

因此,使用`/sbin/service crond start`命令与直接调用`/etc/init.d/crond start`命令的效果是一样的,都是用于启动`crond`服务。

需要注意的是,尽管`/sbin/service`是一个更高级的工具,但并不是所有发行版都提供了这个工具,所以在一些发行版中可能无法使用。

在某些Linux发行版中,并不是所有的服务启动脚本都放在`/etc/init.d`目录下。这取决于不同的发行版和其使用的初始化系统。

在一些现代的Linux发行版中,如CentOS 7和Ubuntu 16.04及以上版本,已经采用了Systemd作为默认的初始化系统。Systemd是一个新型的初始化系统,提供了更多的功能和灵活性。

在Systemd中,服务的启动脚本通常位于`/usr/lib/systemd/system`或`/etc/systemd/system`目录中,而不是`/etc/init.d`目录。具体路径可能因发行版而异。

例如,对于CentOS 7来说,`crond`服务的启动脚本通常位于`/usr/lib/systemd/system/crond.service`路径下。

你可以执行以下命令来查找`crond`服务的启动脚本位置:

```shell
systemctl status crond
```

在输出结果中可以找到`Loaded`行,它会告诉你服务的定义文件路径。

需要注意的是,不同的发行版可能对服务的管理方式有所不同,具体路径和命令可能会有所差异。如果你使用的是其他发行版或有特殊的定制配置,可能需要查阅相关文档或咨询发行版提供商获取更准确的信息。

 

在Systemd管理的Linux发行版中,可以使用`systemctl`命令来管理和控制系统服务。若`crond.service`文件位于`/usr/lib/systemd/system/crond.service`路径下,则可以使用以下命令重启`crond`服务:

```shell
sudo systemctl restart crond
```

执行该命令需要具有管理员权限,因此使用`sudo`进行提权操作。

 



查看crontab服务状态:

systemctl status crond

手动启动crontab服务:

systemctl start crond

查看crontab服务是否已设置为开机启动,执行命令:

ntsysv

加入开机自动启动:

chkconfig –level 35 crond on

chkconfig crond on

 

你可以使用以下命令来检查一个服务是否已添加到开机启动:

```shell
systemctl is-enabled <service-name>
```

将`<service-name>`替换为你要检查的服务的名称。例如,如果你想检查`crond`服务是否已添加到开机启动,可以运行以下命令:

```shell
systemctl is-enabled crond
```

如果服务已添加到开机启动,命令的输出将为`enabled`;如果服务未添加到开机启动,输出将为`disabled`。

希望这对你有帮助!如果还有其他问题,请随时提问。

 

linux查看时间命令:

date

date "+%Y-%m-%d %H:%M:%S"

date命令可以用来显示或设定系统的日期与时间。

1、获取命令帮助

date --help

 

2、查看命令版本

date --version

 

3、查看系统日期及时间

date

 

4、以YYYY-MM-DD显示日期

date +%F

 

5、以MM/DD/YY显示日期

date +%D

 

6、以MM/DD/YYYY显示日期

date +%x

 

7、获取系统年份、月份、日子

date +%Y

 

date +%m

 

date +%d

 

8、获取系统星期值

date +%a

 

date +%A

 

date +%u

 

date +%w

 

9、获取系统时区

date +%z

 

date +%Z

 

10、查询当前日期是一年中的第几周

date +%W

 

date +%U

 

11、获取系统时间

date +%T

 

date +%X

 

12、显示十二小时制时间

date +%r

 

13、显示24小时制时间

date +%R

 

14、按照指定样式显示时间

date +%H-%M.%S

 

date +%H.%M.%S

 

15、从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数

date +%s

 

16、设置系统时间

date -s "12:00:00"

 

17、设置时间及日期

date -s "2024-01-04 09:44:00"

 

18、日期和时间分行显示

date +%F%n%T

 

 

强制设置当前时间

date -s "2022-12-23 11:11:11"

同步时间

以后不会不一样

Linux服务器时间校准
解决方案:
1、如果是windows服务器,直接去控制面板,时间管理进行更新即可

2、如果是Linux服务器,则需要执行ssh命令,切换为管理员root账户在进行操作

Linux中执行:su
然后输入密码即可
根据教程安装ntp,然后连阿里云时间服务器校对即可,命令如下

yum -y install ntp
ntpdate -u 0.pool.ntp.org

 

Linux中有个ntp包可以自动校准时间,并且非常好用。

Debian系统安装NTP校时包:
1    apt-get install ntpdate

CentOS系统安装NTP校时包:
1    yum install ntp

校时命令:
1    ntpdate cn.pool.ntp.org

如果想每隔一定时间自动校时,只需将上面的命令加入至Cron就行了:
1    00 12 * * * /sbin/ntpdate cn.pool.ntp.org

* cn.pool.ntp.org是ntp网络授时组织的中国授时源

 

方法二

快速校对linux服务器时间至北京时间

服务器采用ntp更新时间,经常牵扯到UTC是否开启的问题,开启了时间就会快8个小时
前段时间朋友给我了下面的命令,一条命令解决之前的所有问题。

    rdate -t 60 -s stdtime.gov.hk

使用rdate将stdtime.gov.hk服务器的时间抓取回来,然后写入硬件

    hwclock -w

下面是rdate的命令使用方法介绍

    功能说明:显示其他主机的日期与时间。
    语  法:rdate [-ps][主机名称或IP地址...]
    补充说明:执行rdate指令,向其他主机询问系统时间并显示出来。
    参  数:
      -p  显示远端主机的日期与时间。
      -s  把从远端主机收到的日期和时间,回存到本地主机的系统时间。

 

一、查看和修改Linux的时区

1. 查看当前时区

命令 : “date -R”

2. 修改设置Linux服务器时区

方法 A

命令 : “tzselect”

方法 B 仅限于RedHat Linux 和 CentOS

命令 : “timeconfig”

方法 C 适用于Debian

命令 : “dpkg-reconfigure tzdata”

3. 复制相应的时区文件,替换系统时区文件;或者创建链接文件

cp /usr/share/zoneinfo/主 时 区 / 主时区/主时区/次时区 /etc/localtime

例如:在设置中国时区使用亚洲/上海(+8)

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

二、查看和修改Linux的时间

1. 查看时间和日期

命令 : “date”

2.设置时间和日期

例如:将系统日期设定成2009年11月3日的命令

命令 : “date -s 11/03/2009”

将系统时间设定成下午5点55分55秒的命令

命令 : “date -s 17:55:55”

3. 将当前时间和日期写入BIOS,避免重启后失效

命令 : “hwclock -w”

注:

date

不加参数可以直接看到当前日期时间

cal

不加参数可以直接看到本月月历

 

一、在Centos8安装ntp出现问题

centos 8 执行 ntpdate 会出现以下错误

No match for argument: ntpdate Error: Unable to find a match: ntpdate

原因:在CentOS8.0中默认不再支持ntp软件包,时间同步将由chrony来实现

二、解决方法

1. 通过wlnmp方式

添加wlnmp的yum源

# rpm -ivh http://mirrors.wlnmp.com/centos/wlnmp-release-centos.noarch.rpm

如果报网络不通

修改一下 vim /etc/resolv.conf

options timeout:2 attempts:3 rotate single-request-reopen
; generated by /usr/sbin/dhclient-script
nameserver xxx
nameserver xxx

下面这两条是重点
nameserver 8.8.8.8
nameserver 114.114.114.114

 

安装ntp服务

# yum -y install wntp

时间同步

# ntpdate ntp1.aliyun.com

ntpdate 172.25.54.192

 

posted @ 2022-09-13 10:13  全琪俊  阅读(3148)  评论(0编辑  收藏  举报