本文主要介绍了Linux中定时任务的相关知识。
在日常中,有一些任务需要定时执行,例如:每天定时更新杀毒软件的数据库,每天定时执行数据清洗等脚本。这里就需要做定时任务。
(1)概述
在Linux中定时任务主要分为两种:一次性任务和周期性任务。
一次性任务使用的命令是at和batch;
周期性任务使用的命令是vivex和cron。
(2)一次性定时任务
①命令at
②设置定时任务:at TIME
其中后面的TIME可以用准确时间和模糊时间。
例如:
at now+3min at 11:30at noon,midnight,teatime(下午四点)
如图,使用at now+3min,定时3分钟后的任务:
如图使用at命令后会出现at的提示符,只用输入要执行的命令即可:
在输入完要执行的命令后,按ctrl+D提交即可:
执行的结果将以邮件的形式返回给任务发起者。使用mail命令可以查看邮件。
这里我有很多定时任务的邮件,只需要键入相应的编号即可查看邮件
查看邮件完毕,键入q即可退出
③列出尚未执行的定时任务
at -l
④删除尚未执行的定时任务
at -d #或者atrm #
④执行文件中的命令
at -f /PATH/TO/AT_SCRIPT TIME
例如:文本attest.txt文本如下
使用at -f指定文本文件中的命令执行时间
执行后结果如下:
(3)周期性定时任务
①概述
周期性定时任务常用crond来使用,这是一个daemon。常用的命令是crontab。它主要分为系统cron和用户cron。
其中系统cron在/etc/crontab中。如下图:
用户cron在/var/spool/cron/USERNAME中:
②crontab命令
1.运行者身份
(1)系统cron:在配置文件中指定
一共7个字段,如 3 4 * * * root cat /etc/fstab。中间用空格分隔,前面对应完后6个空格对应完后,剩下的空格统一归为最后一个字段的命令。
其中每个字段分别表示:分钟 小时 在月中的日(1-31) 月(1-12) 星期 用户 命令。
(2)用户cron: 6个字段,与系统cron相比,无需指定用户身份。
①命令crontab
使用crontab后会出现类似文本编辑的页面,只需要编辑相应的定时命令即可。
②选项:
-e:定义; -r:移除配置文件,会删除所有任务; -l:列出周期性任务。
-u USERNAME:以其他用户身份定义。例如:crontab -e -u hadoop
(3)通配符:
*:相应时间点的所有有效取值
,:离散取值, 3,33 ****root date
/:定义指定取值范围内的频率, */3 * * * *:每3分钟-:连续取值:8-20/3 13 8-20/3 * * *
2.PATH
cron默认路径: /bin;/sbin;/usr/bin;/usr/sbin 如果是命令:使用绝对路径
如果是脚本:在脚本中自行定义PATH=
3.如何拒收邮件: 方法一: MAILTO='' 方法二:
&> /dev/null
4.小例子:
3 18 * * 2,5: 每周2和周5的18点3分 7 2 */2 * *:每两天的2点7分
2,32 8-18/3 * * 1-5:星期1到5的8到18点中每3个小时的2分和32分
5.以秒为单位执行任务计划:
方法一: * * * * * /usr/bin/unison webdata * * * * * sleep 30 & /usr/bin/unison webdata
方法二: 每隔15秒:* * * * * for i in 0 1 2; do some_job && sleep 15; done; some_job
每隔10秒:* * * * * for i in {1..5}; do some_job && sleep 10; done; some_job
6.注意事项:
①使用%时要加反斜线。
②在RHEL5有anacron,这是对cron的补充。
他会寻找过去没执行的任务找一个合适的时间点执行。例如,用户定时每天凌晨3点更新杀毒软件库,但2点关机,因此任务不会执行。这样anacron会在下一次开机后找一个合适的时间执行。 而RHEL6cronie本身就有这个功能。本文出自 “Xlows” 博客,转载请与作者联系!