chenshurui 2019-06-21
在linux中使用 Crontab-e
就可以创建定时任务。定时任务写到var/spool/cron
目录下对应的用户文件。例如,对于用户zj
,定时任务就会写入到 var/spool/cron/zj
。不建议使用vi直接编辑这个文件,因为直接编辑不能检查语法错误。
Crontab命令的语法如下:
crontab [-u username] [-l | -e | -r ] 参数: -u : 只有root用户才能进行这个任务,编辑某个用户的crontab -e : 编辑 crontab 的工作内容 -l : 查阅 crontab 的工作内容 -r : 移除所有的 crontab 的工作内容
Crontab命令格式如下:
代表意义 | 分钟 | 小时 | 日期 | 月 | 周 | 命令 |
---|---|---|---|---|---|---|
范围 | 0~59 | 0~23 | 1~31 | 1~12 | 0~7 | 要执行的命令 |
Crontab命令特殊字符的含义:
特殊字符 | 含义 |
---|---|
* | 任何时刻都接受,例如: * cmd 表示每分钟都运行一次cmd |
, | 表示有多个时间段,例如: 2,4 cmd 表示第2和第4分钟运行一次cmd |
- | 表示时间间隔,例如:2-4 cmd 表示第2,3,4分钟,各运行一次cmd |
/n | 表示隔n个时间单位,例如:/5 * 表示没隔5分钟运行一次cmd |
crontab运行定时任务的最小单位是分钟,不建议使用crontab实现秒级的定时任务。
有一个取巧的方法可以让crontab运行秒级的定时任务:
* * * * * cmd * * * * * sleep 20 cmd * * * * * sleep 40 cmd
上面的例子表示每20秒运行一次cmd,不推荐使用此方法
Crontab的缺点:
需要执行秒级任务的时候,很不方便。
当需要执行的定时任务有上百个的时候,Crontab的管理就会特别不方便。
没有一个统一的后台查看各个定时任务的状态。
针对Crontab的种种不足,可以考虑使用 Java 下的 Quartz 或者 Python 下的APScheduler。
APScheduler实现了以下功能:
通过RAM、MySQL、MongoDB文件,之九华存储定时任务。
支持秒级定时任务
支持基于日期、固定时间间隔和Crontab类型的定时任务。