Django задача не выполняется с помощью crontab - PullRequest
0 голосов
/ 10 апреля 2020

Я использую 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 article несколько похож, но в моем случае это тоже не работает.

Любая помощь очень ценится.

Спасибо.

1 Ответ

0 голосов
/ 10 апреля 2020

После проверки нескольких статей в течение нескольких часов и отладки я обнаружил, что основная проблема была с 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

Теперь он работает нормально.

...