プロジェクト仮想環境をロードした後に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
これを解決するには、いくつかの方法があります。
まず、/bin/sh
は、cronがコマンドの実行に使用するシェルですが、/bin/sh
はsource
をサポートしていません。したがって、簡単な修正は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に関するこの質問 から取られたものであり、これに対する回答は、類似しているがまったく同じではない人々のその他のアイデアを含んでいる可能性があります。