设置linux时间(定时更新时间)(linux定时器怎么设置时间)
背景
前段时间检查项目运行情况,查看实时日志时,发现日志中打印的时间明显比北京时间慢了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尽量使用绝对路径,否则会经常因为路径错误导致任务无法执行
你的赞和关注是对我最大的肯定,希望大家多多支持,谢谢大家。