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
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂