版权声明: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列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第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、修改方法
- open
/etc/postfix/main.cf
- comment out
inet_interfaces: all
- 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命令要使用全路径