在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类型的定时任务。