如何为crontab设置virtualenv?
我想设置一个crontab来运行一个Python脚本。
说脚本是这样的:
#!/usr/bin/python print "hello world"
有没有一种方法可以指定一个virtualenv的Python脚本运行? 在shell中我只是做:
~$ workon myenv
有什么相当于我可以在crontab中激活一个virtualenv?
如果你正在使用“workon”,你实际上使用的是“virtualenv wrapper”,它是位于virtualenv之上的另一个抽象层。 单独使用virtualenv可以通过cd到你的virtualenv根目录并运行:
source bin/activate
workon是一个由virtualenv包装器提供的命令,不是virtualenv,它还有一些额外的东西,对于普通的virtualenv来说不是必需的。 你真正需要做的就是在你的virtualenv根目录下findbin / activate文件来激活一个virtualenv。
你可以设置你的crontab来调用一个bash脚本来做到这一点:
#! /bin/bash cd my/virtual/env/root/dir source bin/activate # virtualenv is now active, which means your PATH has been modified. # Don't try to run python from /usr/bin/python, just run "python" and # let the PATH figure out which version to run (based on what your # virtualenv has configured). python myScript.py
另一种解决scheme对我来说效果很好
0 9 * * * /path/to/virtenv/bin/python /path/to/cron_script.py
我更喜欢直接从virtualenv使用Python …
使用bash,你可以创build一个通用的虚拟env包装器,你可以使用它来调用任何命令,就像time
可以包装任何命令一样。
virt_env_wrapper.bash
:
#!/bin/bash source path/to/virtual/env/bin/activate "$@"
Bash的魔法咒语"$@"
在原始命令行中重新转义所有的标记,所以如果你要调用:
virt_env_wrapper.bash python foo.py bar 'baz blap'
foo.py
会看到['bar', 'baz blap']
的sys.argv