前段时间遇到一个需要在本地开发环境定时执行某个脚本来同步数据的情景。
如果是线上业务的话,我一般会使用Celery Beat
来执行定时任务。考虑到运行Celery Beat
需要启动两个服务(celery worker
和celery beat
),还要管理虚拟环境并编写 Python 代码,用在简单的定时任务执行场景过于复杂。
说起定时任务,首先想到的就是crontab
。于是我调研了一下crontab
的使用方法,成功配置了定时任务,也在这里简单的介绍一下。
crontab
(守护进程为crond
)是类 unix 平台下的一个定时任务管理工具,可用于周期性执行定时任务。
<!-- more -->
crontab
的任务通过cron table
格式配置。
* * * * * 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
服务的,需要手动开启。
➜ ~ sudo service cron start
* Starting periodic command scheduler cron [ OK ]
也可以配置cron
服务为开机启动。
➜ ~ 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
)。
* * * * * echo `date` >> /tmp/time.txt
保存定时任务配置后crontab
会输出相关信息。
➜ ~ crontab -e
no crontab for yixian - using an empty one
crontab: installing new crontab
一段时间后就可以看到/tmp/time.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
的日志。
➜ ~ 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 删除。