Вызов скрипта 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
обратите внимание, что важно создавать журналы, чтобы помочь вам найти ошибки или сообщения отладки.