如何用crontab实现Python定时任务

前言

说到定时任务,在生产中几乎不可避免。比如有个报表代码需要在凌晨生成,以便早上查看昨日的具体数据。实现定时任务的方法有很多,这里就来总结一下如何用Linux crontab实现Python定时任务。

Linux crontab使用

直接使用Linux系统层的crontab,它可以定期的执行我们的程序。

crontab的语法简单: crontab [-u user] {-l | -r | -e}

  • -u user 是指设定指定 user 的时程表, 因为服务器不止有root用户,-u参数即可指定用户。
  • -e: 该命令用来编辑crontab任务。
  • -l: 列出该用户所有的定时任务。
  • -r: 删除目前的定时任务。

而在我们编辑定时任务时,需要了解填写的任务格式,格式为:a1 a2 a3 a4 a5 {执行命令}

*    *    *    *    *
-    -    -    -    -
|    |    |    |    |
|    |    |    |    ------ 星期中星期几 (0 - 6) (从周日开始算)
|    |    |    ----------- 月份 (1 - 12) 
|    |    ---------------- 一个月中的第几天 (1 - 31)
|    --------------------- 小时 (0 - 23)
-------------------------- 分钟 (0 - 59)
  • a1表示分钟,a2表示小时,a3表示一个月的第几天,a4表示月,a5表示星期几。
  • 我们用来表示该时间节点都要执行,比如每分钟都要执行,则a1编辑为
  • 当表示为A-B比如a1编辑为1-10,则表示第1到10分钟执行。
  • 当表示为*/n时,表示每隔多久执行一次,比如a1 = * / 5表示每隔5分钟执行一次。
  • 当表示为a,b,c时,表示第a,b,c时间要执行,比如a1 = 1,10,20表示第1、第10、第20分钟都要执行。

常见的定时任务实例

比如我们有一个Python文件a.py路径为/data/,环境是conda环境a_env路径在~/conda/envs/a_env,下面来演示如何编写定时任务。

  • 每分钟执行一次:
* * * * * ~/conda/envs/a_env/bin/python /data/a.py
  • 每天7点20执行一次:
20 7 * * * ~/conda/envs/a_env/bin/python /data/a.py
  • 每月1号和15号执行
0 0 1,15 * *  ~/conda/envs/a_env/bin/python /data/a.py

注意:新创建的 cron 任务,不会立刻执行,至少要过 2 分钟后才可以,或者可以重启 cron 来执行。

小结

这篇总结了下Linux crontab的使用方法,我们在定时任务的设置时,可以选择crontab这一简单的方式来实现。