定时任务时间同步三部曲

版权声明:cao-denghua-非商业性使用-相同方式共享 3.0 中国大陆 (CC BY-NC-SA 3.0 CN) https://blog.csdn.net/caodenghua/article/details/82771037

定时任务时间同步三部曲

第一部分:时间同步

1.安装 ntpdate

yum -y install ntpdate

2.时间同步国际ntp时间地址

ntpdate pool.ntp.org
hwclock  -w

3.计划任务

crontab -e
5 22 * * 0 /usr/sbin/ntpdate pool.ntp.org
5 23 * * 0 /sbin/clock -w

错误的配置(原因在后文中解释)

crontab -e
5 22 * * 0 ntpdate pool.ntp.org
5 23 * * 0 clock -w

第二部分:计划任务时间格式

1、基本格式

crontab内的基本编辑格式如下

* * * * * root run-parts command
分 时 日 月 周   命令
第1列表示分钟159 每分钟用*或者 */1表示
第2列表示小时1230表示0点)
第3列表示日期1314列表示月份1125列标识号星期060表示星期天)
第6列要运行的命令
root表示以root用户身份来运行
  • run-parts表示后面跟着的是一个文件夹,要执行的是该文件夹下的所有脚本
  • 整数间的连字号(-)表示整数列,例如1-4意思是整数1,2,3,4
  • 符号“/”指定步进设置。如0-59/2定义每两分钟执行一次。步进值也可用星号表示。如*/3用来运行每三个月份运行指定任务。

2、检测时间

基本上,cron服务的最低检测时间单位是分钟,所以cron会每分钟读取一次/etc/crontab与/var/spool/cron中的数据内容,因此,只要您编辑完/etc/crontab文件并且保存之后,crontab时设定就会自动执行。

指令形式:

01   * * * * test mail -s test test < /home/test/test/test.txt

目录形式:

*/5   *  *  *  * root run-parts /root/runcron

建立一个/root/runcron目录,将每隔5分钟执行一次的可执行文件都写到该目录下,就可以让系统每5分钟执行一次该目录下的所有可执行文件。

如果每个流程都在同一时间启动,那么在某个时段,系统会非常的繁忙,所以这时必须分别设定。可以这样做:

1,6,11,16,21,26,31,36,41,46,51,56 * * * * root …………   // 省略号代表命令
2,7,12,17,22,27,32,37,42,47,52,57 * * * * root ………… 
3,8,13,18,23,28,33,38,43,48,53,58 * * * * root ………… 
4,9,14,19,24,29,34,39,44,49,54,59 * * * * root ………… 

注意,要用","分隔时,不要带有空格。如此一来,则可以将每5分钟工作的流程分别安排在不同的时刻进行。

第三部分:计划任务里执行更新时间出错

crontab -e里的配置

5 22 * * * ntpdate pool.ntp.org

1、再查看/var/log/cron日志

Sep 16 22:05:01 web1 CROND[10087]: (root) CMD (ntpdate pool.ntp.org >> /var/log/ntpdate.log)
Sep 16 22:05:01 web1 CROND[10086]: (root) MAIL (mailed 36 bytes of output but got status 0x004b#012)

说明mail报错。linux系统没有安装mail命令。那就是postfix服务的问题

2、查看服务运行状态

service crond status
crond (pid  1124) 正在运行...

service postfix status      # postfix有问题
master 已停

查看/var/log/maillog

Sep 16 22:05:01 dg2 postfix/sendmail[7611]: fatal: parameter inet_interfaces: no local interface found for ::1

从时间上看,确实是这个问题。问题找到了,需要修改postfix的配置

3、修改方法

  1. open /etc/postfix/main.cf
  2. comment out inet_interfaces: all
  3. add inet_protocol: ipv4

4、查看邮件信息

/var/spool/mail/root里发现定时任务依旧没有执行成功

#
# 邮件内容头省略
#
Message-Id: <20180919052901.F34F53E02A7@dg2.localdomain>
Date: Wed, 19 Sep 2018 13:29:01 +0800 (CST)

/bin/sh: ntpdate: command not found    # 此处报错

5、查看ntpdate的路径

whereis ntpdate
ntpdate: /usr/sbin/ntpdate /usr/share/man/man8/ntpdate.8.gz

which ntpdate
/usr/sbin/ntpdate

问题找到了,在定时服务中,ntpdate命令要使用全路径

猜你喜欢

转载自blog.csdn.net/caodenghua/article/details/82771037