【问题标题】:Calling python script from crontab with activate [duplicate]使用激活从 crontab 调用 python 脚本 [重复]
【发布时间】:2011-02-24 20:07:48
【问题描述】:

如何从需要使用激活的 crontab 调用 python 脚本(源 env/bin/active)?

【问题讨论】:

    标签: python crontab virtualenv


    【解决方案1】:

    Virtualenv 的激活脚本非常简单。它主要设置 virtualenv 的 Python 解释器的路径;如果您不在交互式外壳中,则它所做的其他事情(设置PS1、保存旧变量等)并不是必需的。因此,最简单的方法就是使用正确的 Python 解释器启动您的 Python 脚本,这可以通过以下两种方式之一完成:

    1.设置 Python 脚本以使用 virtualenv 的 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
    

    【讨论】:

    • easy_install 库的路径如何?
    • 如果它们也安装在虚拟环境中,或者“全局”站点包目录中,应该可以找到它们;否则,您将不得不将它们放在您的 $PYTHONPATH 中,这有点难看,但可以通过使用 /usr/bin/env 或类似的方式启动 Python bin 来完成。
    • 最后一个代码块应该以“/home/bin/cronjob”结尾
    【解决方案2】:

    我的方法始终是使 crontab 尽可能简单,并处理 crontab 调用的脚本中的所有配置。

    1) 创建一个shell脚本:例如/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。例如,每天每半小时执行一次:

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

    请注意,生成日志以帮助您查找错误或调试消息非常重要。

    【讨论】:

      猜你喜欢
      • 2011-10-20
      • 1970-01-01
      • 2019-08-28
      • 1970-01-01
      • 2018-08-02
      • 1970-01-01
      • 1970-01-01
      • 2018-01-26
      相关资源
      最近更新 更多