Docker中Django定时任务django-crontab--crontab任务不生效

问题点

我使用Docker部署项目,启动的crontab的时候并未生效,添加定时任务时提示:/usr/bin/crontab not found


基本使用

  • django默认不带定时任务的功能,本文使用django-crontab插件实现定时任务。
$ pip install django-crontab
  • settings中配置
INSTALLED_APPS = (
    'django_crontab',
)
  • 创建定时任务
# myapp/cron.py
def my_scheduled_job():
  pass
  • 把定时任务添加到settings
CRONJOBS = [
    ('23 59 * * *', 'myapp.cron.my_scheduled_job')
]
  • 定时任务的时间格式
基本格式 :

    * * * * *

    分 时 日 月 周      命令
    M: 分钟(0-59)。每分钟用*或者 */1表示
    H:小时(0-23)。(0表示0点)
    D:天(1-31)。
    m: 月(1-12)。
    d: 一星期内的天(0~6,0为星期天)。
第一个星号代表分钟,第二个代表小时,第三个代表天,第四个代表月,第五个代表一星期内的第几天

注意:'1 * * * *' 代表每个小时的第一分钟执行定时任务,即,每小时才会更新一次。
我们如果要设置每分钟执行一次定时任务,则需要使用以下
'*/1 * * * *'

'0 */1 * * *'  # 每1小时执行一次
'0 10 * * *'	# 每天10点执行
'30 19 * * *'	# 每天19点30分执行
'0 10 * * 1'	# 每周一10点执行
'30 17 * * 5'	# 每周五17点30分执行
'0 10 1 10 *'	# 每年10月1日10点执行
'0 5,17 * * *'	# 每天5:00和17:00执行任务

"""
设置时间组合:

1 * * * * reboot #表示每个小时的1分开始执行 例如 1:1分 2:1分 3:1分
*/1 * * * * reboot #这里的*/1表示每隔一分钟就执行reboot命令了,一小时执行60次
*/5 * * * * reboot #每隔5分钟执行一次,一小时执行12次
1 1,2 * * * reboot #其中的1,2代表每天的1点和2点的第一分钟的时候执行reboot命令,中间的逗号表示不同的时间点
1 1-3 * * * reboot #其中的1-3表示每天的1点到3点的第一分钟的时候执行reboot命令。“-”可以表示一个时间的范围
1 1 1 * * reboot #表示每个月1号的1点1分执行一次reboot
1 1 1-10 * * reboot #表示每个月1到10号都执行一次reboot
1 1 * 1 * reboot #每年1月的每天执行一次重启
1 1 * * 1 reboot #星期一执行一次重启
"""

"""
设置时间结构:

 ┌────────── minute (0 - 59)
 │ ┌──────── hour (0 - 23)
 │ │ ┌────── day of month (1 - 31)
 │ │ │ ┌──── month (1 - 12)
 │ │ │ │ ┌── day of week (0 - 6 => Sunday - Saturday, or
 │ │ │ │ │                1 - 7 => Monday - Sunday)
 ↓ ↓ ↓ ↓ ↓
 * * * * * command to be executed
"""
  • 解决中文字符问题
# 在settings中添加
CRONTAB_COMMAND_PREFIX = 'LANG_ALL=zh_cn.UTF-8'
  • 注册定时任务
python manage.py crontab add
  • 显示定时任务
$ python manage.py crontab show
  • 移除定时任务
$ python manage.py crontab remove

在Docker中使用

时区问题

  • 查看时间
date
  • 修改系统时间(在Docker中操作)
# 第一项选择Asia,然后选择China,BeijingTime,完成后一定要重启容器
tzselect

缺少cron

  • docker的容器中需要有crom服务,django-crontab依赖它,进入到容器中安装
# 安装cron
apt-get -y install cron

# 启动cron
service cron start

# 在项目目录下添加定时任务
python manage.py crontab add

# 查看启动的定时任务
python manage.py crontab show

你可能感兴趣的:(Django,Docker,Python,django,docker,python)