Вызов скрипта python из crontab с помощью activate [duplicate]

этот вопрос уже есть ответ здесь:

Как вызвать скрипт python из crontab, который требует использования activate (source env/bin/active)?

2 ответов


скрипт активации Virtualenv довольно прост. Он в основном устанавливает путь к интерпретатору Python вашего virtualenv; другие вещи ,которые он делает (установка PS1, сохранении старых переменных и т. д.) на самом деле не нужны, если вы не находитесь в интерактивной оболочке. Таким образом, самый простой способ-просто запустить скрипт Python с правильным интерпретатором Python, что можно сделать одним из двух способов:

1. Настройте скрипт Python для использования Python virtualenv переводчик

предполагая, что интерпретатор virtualenv находится в ~/virtualenv/bin/python, вы можете поместить этот путь в верхней части вашего скрипта Python:

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

а затем запустите свой скрипт с вашего crontab, как обычно.

2. Запустите скрипт с соответствующим интерпретатором Python в вашем cronjob

предполагая, что ваш скрипт находится в ~/bin/cronjob и интерпретатор Python вашего virtualenv находится в ~/virtualenv/python, вы можете поместить это в свой кронтаб:

* * * * * /home/user/virtualenv/python /home/user/bin/cronjob

мой подход всегда держать кронтаб как можно проще и обрабатывать все конфигурации внутри скриптов, вызываемых 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 ../ активировать

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()

On в этом примере настройки django расположены на settings/production.py

3) Наконец, отредактируйте /etc / crontab. Например, выполнять каждые полчаса, каждый день:

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

обратите внимание, что важно создавать журналы, чтобы помочь вам найти ошибки или сообщения отладки.