web-dev-qa-db-ja.com

仮想環境を介して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 virtual env 。ユーザー環境変数を使用する必要がありますか?virtualenvの変数を使用しますか?それを実装する方法?ありがとう!

注:それが役立つ場合は、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
7
bolino

これを解決するには、いくつかの方法があります。

まず、/bin/shは、cronがコマンドの実行に使用するシェルですが、/bin/shsourceをサポートしていません。したがって、簡単な修正はShell=/bin/bashはcrontabにあります。

または...

次に、source virtualenv/bin/activateとにかく。 virtualenv pythonを直接呼び出すだけです。

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

これらは SOに関するこの質問 から取られたものであり、これに対する回答は、類似しているがまったく同じではない人々のその他のアイデアを含んでいる可能性があります。

8
Michael Hampton