가상 환경을 통해 Django Python 명령을 실행하는 Cron 작업이 작동하지 않습니다.

가상 환경을 통해 Django Python 명령을 실행하는 Cron 작업이 작동하지 않습니다.

프로젝트 가상 환경을 로드한 후 Django 명령을 실행하는 것으로 추정되는 crontab 파일이 있습니다.

*/1 * * * * source /home/virtualenvs/mydjangoproject-venv/bin/activate && python /home/www/production/mydjangoproject/manage.py mydjangocommand

...하지만 전혀 아무 일도 일어나지 않습니다. cron 로그에는 특별한 문제가 출력되지 않습니다.

Mar 13 19:51:01 110 CRON[23807]: (root) CMD (source /home/virtualenvs/mydjangoproject-venv/bin/activate && python /home/www/production/mydjangoproject/manage.py mydjangocommand)

말할 필요도 없이 명령 자체는 셸에 복사하여 붙여넣을 때 완벽하게 작동합니다.

나는 이것이 내 crontab의 환경 변수와 관련되어 있다는 것을 알고 있지만 이 문제에 대해 교육을 전혀 받지 못했고 특히 Python 가상 환경에서 실행될 때 무엇을 해야할지 전혀 모릅니다. 내 사용자 환경 변수를 사용해야 합니까? virtualenv의 것? 그것을 구현하는 방법은 무엇입니까? 감사해요!

NB: 도움이 될 경우를 대비해 crontab 환경 변수에 대해 다음과 같은 출력이 있습니다(crontab을 통해 "env"를 파일로 내보낼 때).

HOME=/root
LOGNAME=root
PATH=/usr/bin:/bin
LANG=en_US.UTF-8
SHELL=/bin/sh
LC_ALL=en_US.UTF-8
PWD=/root

그리고 프로젝트 가상 환경에는 다음과 같은 환경 변수가 있습니다.

TERM=xterm-256color
SHELL=/bin/bash
SSH_CLIENT=x.x.x.x 53007 22
OLDPWD=/root/production/mydjangoproject
SSH_TTY=/dev/pts/0
LC_ALL=en_US.UTF-8
USER=root
VIRTUAL_ENV=/home/virtualenvs/mydjangoproject-venv
MAIL=/var/mail/root
PATH=/home/virtualenvs/mydjangoproject-
venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/root
LANG=en_US.UTF-8
PS1=(mydjangoproject-venv)${debian_chroot:+($debian_chroot)}\u@$(hostname -f):\w\$ 
SHLVL=1
HOME=/root
LS_OPTIONS=--color=auto --group-directories-first
LOGNAME=root
SSH_CONNECTION=x.x.x.x 53007 x.x.x.x 22
LC_CTYPE=en_US.UT

답변1

이 문제를 해결하는 몇 가지 방법이 있습니다.

첫째, /bin/sh셸 cron이 명령을 실행하는 데 사용 /bin/sh하지만 source. 따라서 빠른 수정은 SHELL=/bin/bashcrontab에서 설정하는 것입니다.

또는...

둘째, 어쨌든 그럴 필요는 없습니다 source virtualenv/bin/activate. virtualenv python을 직접 호출할 수 있습니다.

* * * * * cd /home/www/production/mydjangoproject; /home/virtualenvs/mydjangoproject-venv/bin/python manage.py mydjangocommand

이것들은 다음에서 가져온 것입니다.SO에 대한 이 질문, 답변에는 유사하지만 완전히 동일하지는 않은 상황에 있는 사람들을 위한 다른 아이디어가 포함될 수 있습니다.

관련 정보