前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用crontab运行简单的定时任务

使用crontab运行简单的定时任务

原创
作者头像
杜逸先
修改2021-06-10 11:51:09
7870
修改2021-06-10 11:51:09
举报

前段时间遇到一个需要在本地开发环境定时执行某个脚本来同步数据的情景。

如果是线上业务的话,我一般会使用Celery Beat来执行定时任务。考虑到运行Celery Beat需要启动两个服务(celery workercelery beat),还要管理虚拟环境并编写 Python 代码,用在简单的定时任务执行场景过于复杂。

说起定时任务,首先想到的就是crontab。于是我调研了一下crontab的使用方法,成功配置了定时任务,也在这里简单的介绍一下。

crontab 简介

crontab(守护进程为crond)是类 unix 平台下的一个定时任务管理工具,可用于周期性执行定时任务。

<!-- more -->

crontab的任务通过cron table格式配置。

cron table 格式

代码语言:txt
复制
*    *    *   *    *  Command_to_execute
|    |    |    |   |
|    |    |    |    Day of the Week ( 0 - 6 ) ( Sunday = 0 )
|    |    |    |
|    |    |    Month ( 1 - 12 )
|    |    |
|    |    Day of Month ( 1 - 31 )
|    |
|    Hour ( 0 - 23 )
|
Min ( 0 - 59 )
  • 使用'*'匹配任意值,例如:每天零点执行0 0 * * *
  • 使用','表示一系列值,例如:每个周末零点执行0 0 * * 0,6
  • 使用'-'表示范围,例如:工作日中午执行0 12 * * 1-5
  • 使用'/'表示在指定数值是特定值的整数倍时执行,例如:每五分钟执行*/5 * * * *

启动cron服务

我的开发环境操作系统(Ubuntu 20.04)默认是不启动cron服务的,需要手动开启。

代码语言:txt
复制
➜  ~ sudo service cron start
 * Starting periodic command scheduler cron                     [ OK ]

也可以配置cron服务为开机启动。

代码语言:txt
复制
➜  ~ sudo systemctl enable cron
Synchronizing state of cron.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable cron

配置crontab任务

可以通过crontab -e命令配置当前用户的定时任务,执行后会打开默认编辑器,我们可以编写一个简单的定时任务(每分钟输出当前时间追加到/tmp/time.txt)。

代码语言:txt
复制
* * * * * echo `date` >> /tmp/time.txt

保存定时任务配置后crontab会输出相关信息。

代码语言:txt
复制
➜ ~ crontab -e
no crontab for yixian - using an empty one
crontab: installing new crontab

一段时间后就可以看到/tmp/time.txt文件会定时更新。

代码语言:txt
复制
➜  ~ tail -f /tmp/time.txt
2021年 04月 06日 星期二 22:46:01 CST
2021年 04月 06日 星期二 22:47:01 CST
2021年 04月 06日 星期二 22:48:01 CST
2021年 04月 06日 星期二 22:49:01 CST

查看crontab执行日志

crontab的日志记录在/var/log/cron.log,不过 Ubuntu 默认不开启crontab的日志选项,需要编辑/etc/rsyslog.d/50-default.conf文件,取消cron行的注释, 并重启rsyslog(sudo service rsyslog restart)。

稍后就可以查看crontab的日志。

代码语言:txt
复制
➜  ~ tail /var/log/cron.log
Apr  6 22:56:01 Duyixian-PC CRON[22749]: (yixian) CMD (echo `date` >> /tmp/time.txt)
Apr  6 22:57:01 Duyixian-PC CRON[22752]: (yixian) CMD (echo `date` >> /tmp/time.txt)
Apr  6 22:58:01 Duyixian-PC CRON[22755]: (yixian) CMD (echo `date` >> /tmp/time.txt)

其他crontab命令

  • 查看当前用户定时任务配置:crontab -l
  • 取消所有当前用户定时任务:crontab -r
  • 使用-u选项编辑或查看其他用户配置cron -u username -l [-e]

总结

诸如crontab这样的 Linux 常用工具可以极大地提高日常工作的效率,值得多多学习了解。

原文

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • crontab 简介
  • cron table 格式
  • 启动cron服务
  • 配置crontab任务
  • 查看crontab执行日志
  • 其他crontab命令
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档