Crontab выполняет команду Django, но ничего не происходит

(x-posted от StackOverflow)

Я настроил крон для выполнения следующей команды для django-крона (django 1.10.5, python 3.5, анаконда 4.2.0) в человечности 16.04:

PATH=/user/project/projectname/website
* * * * * ./manage.py runcrons "app.crons.RunCronJob"

Вот мое дерево файла, которое расположено непосредственно под высшим уровнем удаленного сайта (/):

|-- user
|   |-- project
|   |   |-- projectname
|   |   |   |-- website
|   |   |   |   |-- file.txt
|   |   |   |   |-- manage.py
|   |   |   |   |-- app (a django app)
|   |   |   |   |   |-- crons.py

RunCronJob cronjob в crons.py это добавляет строку к file.txt под /website. Когда я вхожу /website каталог и вручную делает ./manage.py runcrons "app.crons.RunCronJob", это работает просто великолепно. Однако, когда cronjob, который я настроил, выполняется, он ничего не добавляет к моему текстовому файлу. Я проверил, что задача крона работает каждую минуту с обоими grep cron /var/log/syslog почтовый сервис, но данные, которые я получаю, кажется, не говорит мне ничего полезного о том, почему он не работает.

(Примечание для Python: Я добавил os.chdir(os.path.dirname(sys.argv[0])) к вершине моего crons.py гарантировать, что текстовый файл записан в в корректном каталоге, неважно, откуда команда выполняется. Например, выполнение website/manage.py runcrons "app.crons.RunCronJob" от /projectname работает на меня также. Поэтому я не подозреваю, что моя проблема связана с django, библиотекой django-крона или Python.)

Я просмотрел некоторые другие ответы, которые обсуждают некоторые типичные проблемы с кроном и старались изо всех сил решать любые проблемы: мой crontab имеет новую строку в конце, я установил свой часовой пояс (хотя это не должно влиять на мой cronjob), pgrep cron возвращает число, я установил полномочия для своего текстового файла, я много раз перезапускал крон и т.д.

Хотя я также попытался правильно установить свои пути среды, я подозреваю, что некоторая часть его является все еще неправильной. Я попробовал различные вещи как добавление /home перед /user, удаление точки и/или наклонной черты перед manage.py, и добавление абсолютного filepath перед моей командой, все напрасно.

Даже при том, что я думаю, что мой подозреваемый находится в том, как я устанавливаю свои пути, ошибка могла все еще быть где-то в другом месте в моем проекте. Какую проблему я пропускаю, или как я должен диагностировать ее?

1
задан 23 May 2017 в 15:39

1 ответ

Я нашел решение своей проблемы и при этом также понял, что мой заголовок для этого сообщения является на самом деле неправильным: crontab выполнялся, но проблема была то, что команды Python в рамках моего сценария крона были не выполняемый.

причина этого состояла в том, что crontab выполнялся с другим $PATH переменная чем тогда, когда я выполнил свои команды непосредственно в консоли, описанной точно как в принятом другие ответы , я связался. Моя ошибка состояла в том, что я полностью неправильно понял $PATH переменная; я думал, что это, как предполагалось, указало на исполняемый файл в моем проекте, тогда как в действительности это содержит пути к папкам, которые интерпретируют сценарии (как интерпретатор Python). Таким образом, мои сценарии не выполнялись, потому что крон не мог найти, что интерпретатор выполнил их. Очень глупая ошибка, которой, возможно, избежали путем чтения документации!

у меня не было абсолютно никаких проблем с django, django-кроном или Python.

Сводка: крон использовал другой путь. Добавленный путь стандартной среды (тип $PATH в консоли для просмотра).

1
ответ дан 7 December 2019 в 15:36

Другие вопросы по тегам:

Похожие вопросы: