MySQL, Oracle, Linux, 软件架构及大数据技术知识分享平台

网站首页 > linux / 正文

设置linux时间(定时更新时间)

2024-11-26 15:29 huorong linux 3 ℃ 0 评论

背景

前段时间检查项目运行情况,查看实时日志时,发现日志中打印的时间明显比北京时间慢了30分钟,这时我心中大体知道了原因并有了相应解决办法。为了印证心中想法,我关闭日志文件,在系统中使用date命令,发现时间确实是慢30分钟。

Linux经过一段时间,时间变得不准确是常见现象,主要是因为服务器上的物理时钟频率出现小幅变化,导致时间不准。这种情况会导致插入数据库数据的操作时间都是错的,定时任务没有按预定的时间执行等相关问题。

下边简单说一下如何修改linux时间。

方式一:ntpdate同步时间

1.首先先检查是否安装ntpdate命令

rpm -qa | grep ntpdate

使用如下命令安装(未安装请看)

yum -y install ntp ntpdate

设置时间为asia.pool.ntp.org

ntpdate asia.pool.ntp.org

也可以同步时间为阿里服务器时间

ntpdate ntp1.aliyun.com(阿里服务器时间)

同步硬件时间

hwclock --systohc

ntpdate命令介绍

ntpdate命令 是用来设置本地日期和时间。

语法

ntpdate [ -b] [ -d] [ -s] [ -u] [ -aKeyid] [ -eAuthenticationDelay] [ -kKeyFile] [ -oVersion] [ -pSamples] [ -tTimeOut] Server...

选项

-aKeyid

使用 Keyid 来认证全部数据包。

-b

通过调用 settimeofday 子例程来增加时钟的时间。

-d

指定调试方式。判断 ntpdate 命令会产生什么结果(不产生实际的结果)。结果再现在屏幕上。这个标志使用无特权的端口。

-eAuthenticationDelay

指定延迟认证处理的时间秒数。

-kKeyFile

当不使用缺省值 /etc/ntp.keys 文件时,为包含密钥的文件指定一个不同的名称。 请参阅文件KeyFile的描述。

-oVersion

当轮询它的发出数据包时,指定使用的 NTP 版本实现。 Version 的值可以是 1,2,3。缺省值是 3。

-pSamples

指定从每个服务器获取的样本的数目。 Samples 的值在 1 和 8 之间,并包括 1 和 8。它的缺省值是 4。

-s

指定日志操作 syslog 设施的使用,而不是使用标准输出。 当运行 ntpdate 命令和 cron命令时,它是很有用的。

-tTimeOut

指定等待响应的时间。给定 TimeOut 的值四舍五入为 0.2 秒的倍数。缺省值是 1 秒。

-u

指定使用无特权的端口发送数据包。 当在一个对特权端口的输入流量进行阻拦的防火墙后是很有益的, 并希望在防火墙之外和主机同步。防火墙是一个系统或者计算机,它控制从外网对专用网的访问。

方式一确实是修改了时间,但也仅仅是修改了时间,一段时间后你会发现,时间还会变的不准确,还需要在执行上边的命令修改时间,那么有没有一种一劳永逸的方式呢?有,定时同步时间

方式二:定时同步时间

crond 是 Linux 下用来周期地执行某种任务或等待处理某些事件的一个守护进程,和 Windows 中的计划任务类似。

查看是否安装cron定时任务服务

敲入如下命令,如果什么也没返回,代表未安装。

rpm -qa | grep cron

1.1安装cron(未安装请看)

yum install -y vixie-cron
yum install -y crontabs

启动cron,并设置为开机自启

service crond start //启动cron
chkconfig crond on //设置开机自启

1.2crond相关命令

service crond start //启动服务
service crond stop //关闭服务
service crond restart //重启服务
service crond reload //重新载入配置
service crond status //查看crontab服务状态

2设置定时任务,有如下两种方式

2.1 crontab -e (操作方法和 Vim 是一致)

敲入如下命令

编写相应任务

2.1 直接编辑/etc/crontab 文件,添加相应的任务

两种方式保存退出后,相应任务即可在指定的时间执行。至此设置定时任务已经完成。

3 crontab 文件内容介绍

想必大家对 */30 * * * * 这个格式比较好奇吧,其实这个就是你规定的任务执行的时间。

下边来详细介绍下:

3.1各个字段可以使用特殊字符

"*"代表所有的取值范围内的数字,如月份字段为*,则表示1到12个月;

"/"代表每一定时间间隔的意思,如分钟字段为*/10,表示每10分钟执行1次。

"-"代表从某个区间范围,是闭区间。如“3-7”表示“3,4,5,6,7”,小时字段中0-23/1表示在0~23点范围内每1个小时执行一次。

","分散的数字,如:1,2,7,9。

3.2例子

30 22 * * * /etc/init.d/nginx restart      //每晚的22:30重启 nginx。
0 1 1,20 * * /etc/init.d/nginx restart     //每月1、 20日凌晨1点重启nginx。
0,30 1-5 * * * /etc/init.d/nginx restart    //每天凌晨1点至5点之间每隔30分钟重启nginx。
*/30 * * * * /usr/sbin/ntpdate 210.72.145.20      //每半小时同步一下时间
* 23-5/1 * * * /etc/init.d/nginx restart //晚上11点到早上5点之间,每 隔一小时重启nginx

3.3注意点

crontab中的command尽量使用绝对路径,否则会经常因为路径错误导致任务无法执行

你的赞和关注是对我最大的肯定,希望大家多多支持,谢谢大家。

Tags:linux获取系统时间

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言