python-3.x - Django 任务未使用 crontab 运行
问题描述
我正在使用django-kronos
创建一个 cron 作业,当我手动运行它时它运行良好。但在 crontab 的情况下它不会运行。
下面是我测试它是否工作的代码:
settings.py
ENV_PATH = os.path.join(BASE_DIR, '.env')
# Adding KRONOS PROPERTIES
KRONOS_PREFIX = '{} '.format(ENV_PATH)
KRONOS_POSTFIX = '>> /var/log/cron.log 2>&1'
.env
我在文件中有我的密码。因此,我习惯于KRONOS_PREFIX
先导出这些变量。KRONOS_POSTFIX
用于将日志添加到我的 cron。
cron.py
import kronos
@kronos.register('* * * * *')
def test_task():
print("IT WORKS....")
Commands:
$ python manage.py showtasks
* List of tasks registered in Kronos *
>> Kronos tasks
>> test_task
>> Django tasks
$ python manage.py installtasks
1 task removed, 1 installed.
crontab -l
* * * * * /home/sam/..../.env /home/sam/.../venv/bin/python /home/sam/.../manage.py runtask test_task --settings=my_project.settings >> /var/log/cron.log 2>&1 # kronos:4f383ee5e8844285d6ac6dc78196e377
它在我crontab
手动运行中提到的命令并记录输出时起作用。我在网上查了几篇文章都没有成功。
我发现这篇digitalocean 文章有些相似,但这在我的情况下也不起作用。
任何帮助深表感谢。
谢谢。
解决方案
在检查了几篇文章几个小时并调试后,我发现主要问题是source .env
我使用的。crontab 无法使用该命令导出环境变量。所以,我决定创建另一个文件,名称.env_constants
和更新KRONOS_PREFIX
如下:
settings.py
KRONOS_PREFIX = 'env - `cat {}` '.format(os.path.join(BASE_DIR, '.env_constants'))
.env_constants
DB_NAME=db_name
DB_USER=db_user
DB_PASSWORD=db_password
DB_HOST=localhost
DB_PORT=port_no
我的 cron 现在看起来像:
* * * * * env - `cat /home/sam/.../.env_constants` /home/sam/.../venv/bin/python /home/sam/.../manage.py runtask test_task --settings=my_project.settings >> /var/log/cron.log 2>&1 # kronos:4f383ee5e8844285d6ac6dc78196e377
现在它运行良好。
推荐阅读
- nginx - 为什么 proxy_pass 返回 404?
- javascript - 如何填充圆形范围滑块内的背景颜色?以及如何增加工具提示的字体大小?
- javascript - 一次只播放一首歌曲 (React)
- python - PANDAS 索引特定列对应于列表中的字符串
- javascript - 从 11 更新到 12 版本后,Angular 项目不起作用
- sql - 仅当sql表中不存在值时如何检查和插入值
- python - 在乌龟中对齐是什么意思?
- c# - 是否可以在 UWP MapControl 中更改天空纹理?
- android - 无法使用视图绑定 Android Studio 加载图像(DS Photo Editor SDK)
- c - 内存读取时间