6

activate(source env / bin / active)を使用する必要があるcrontabからPythonスクリプトを呼び出すにはどうすればよいですか?

4

2 に答える 2

18

Virtualenv の activate スクリプトは非常に単純です。ほとんどの場合、virtualenv の Python インタープリターへのパスを設定します。対話型シェルを使用していない場合、それが行う他のこと (設定PS1、古い変数の保存など) は実際には必要ありません。したがって、最も簡単な方法は、正しい Python インタープリターを使用して Python スクリプトを起動することです。これは、次の 2 つの方法のいずれかで実行できます。

1. virtualenv の Python インタープリターを使用するように Python スクリプトをセットアップします。

virtualenv のインタープリターが にあると仮定すると、~/virtualenv/bin/pythonそのパスを Python スクリプトの先頭に置くことができます。

#!/home/user/virtualenv/bin/python

そして、通常どおり、crontab からスクリプトを起動します。

2. cronjob で適切な Python インタープリターを使用してスクリプトを起動します。

スクリプトが に~/bin/cronjobあり、virtualenv の Python インタープリターが にあると仮定すると~/virtualenv/python、これを crontab に入れることができます。

* * * * * /home/user/virtualenv/python /home/user/bin/cronjob
于 2010-05-27T19:37:45.710 に答える
1

私のアプローチは、常にcrontabをできるだけシンプルに保ち、crontab によって呼び出されるスクリプト内のすべての構成を処理することです。

1) シェル スクリプトを作成します。例: /var/webapp/cron.sh

#!/bin/sh
PATH="/var/webapp/.env/bin:$PATH"
export PATH
cd /var/webapp/
python test.py

/var/webapp/.env/binは virtualenv の場所です。PATH を設定すると、source ../activate を実行する必要がなくなります

2) 環境を適切に設定します。たとえば、Django アプリケーションの場合:

#!/usr/bin/env python

import os
from datetime import datetime

os.environ['DJANGO_SETTINGS_MODULE'] = 'settings.production'
os.environ['DJANGO_CONF'] = 'settings.production'

from util.models import Schedule

dset = Schedule.objects.all()
for rec in dset:
    print rec

print 'cron executed %s' % datetime.today()

この例では、django の設定は settings/production.py にあります。

3) 最後に、/etc/crontab を編集します。たとえば、毎日 30 分ごとに実行するには、次のようにします。

1,31 * * * *  root   /var/webapp/cron.sh >> /var/webapp/cron.log

エラーの発見やメッセージのデバッグに役立つログを生成することが重要であることに注意してください。

于 2012-11-04T23:15:37.210 に答える