本文主要介绍了Linux中定时任务的相关知识。


在日常中,有一些任务需要定时执行,例如:每天定时更新杀毒软件的数据库,每天定时执行数据清洗等脚本。这里就需要做定时任务。


(1)概述

在Linux中定时任务主要分为两种:一次性任务和周期性任务。

一次性任务使用的命令是at和batch;

周期性任务使用的命令是vivex和cron。


(2)一次性定时任务

①命令at

②设置定时任务:at TIME

其中后面的TIME可以用准确时间和模糊时间。

例如:


   at now+3min



   at 11:30



   at noon,midnight,teatime(下午四点)

如图,使用at now+3min,定时3分钟后的任务:

liunx 怎么定时执行java程序 linux定时执行任务_数据库

如图使用at命令后会出现at的提示符,只用输入要执行的命令即可:

liunx 怎么定时执行java程序 linux定时执行任务_liunx 怎么定时执行java程序_02

在输入完要执行的命令后,按ctrl+D提交即可:

liunx 怎么定时执行java程序 linux定时执行任务_定时任务_03

执行的结果将以邮件的形式返回给任务发起者。使用mail命令可以查看邮件。

liunx 怎么定时执行java程序 linux定时执行任务_数据库_04

这里我有很多定时任务的邮件,只需要键入相应的编号即可查看邮件

liunx 怎么定时执行java程序 linux定时执行任务_操作系统_05

查看邮件完毕,键入q即可退出

liunx 怎么定时执行java程序 linux定时执行任务_数据库_06

③列出尚未执行的定时任务

at -l

liunx 怎么定时执行java程序 linux定时执行任务_数据库_07

④删除尚未执行的定时任务

at -d #或者atrm #

liunx 怎么定时执行java程序 linux定时执行任务_liunx 怎么定时执行java程序_08

④执行文件中的命令

at -f /PATH/TO/AT_SCRIPT TIME

例如:文本attest.txt文本如下

liunx 怎么定时执行java程序 linux定时执行任务_定时任务_09

使用at -f指定文本文件中的命令执行时间

liunx 怎么定时执行java程序 linux定时执行任务_liunx 怎么定时执行java程序_10

执行后结果如下:

liunx 怎么定时执行java程序 linux定时执行任务_定时任务_11


(3)周期性定时任务

①概述

周期性定时任务常用crond来使用,这是一个daemon。常用的命令是crontab。它主要分为系统cron和用户cron。

其中系统cron在/etc/crontab中。如下图:

liunx 怎么定时执行java程序 linux定时执行任务_操作系统_12

用户cron在/var/spool/cron/USERNAME中:

liunx 怎么定时执行java程序 linux定时执行任务_liunx 怎么定时执行java程序_13

②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:列出周期性任务。


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本身就有这个功能。




https://blog.51cto.com/xlows/1390619