我在mac上使用oh-my-zsh,python 3.6.1。我想运行crontab来执行python3脚本。
我最近的一次尝试是这样的(我发现的20个不同的stackoverflow答案都不起作用,所以请不要把它作为重复关闭:
SHELL=/bin/bash
24 12 * * * root source env/latest-env/bin/activate && /usr/local/bin/python3 /path/to/file/data_transfer.py
字符串
错误是ModuleNotFoundError: No module named 'some_module'
,因此它没有激活我的virtual_env,因为该模型存在于最新的虚拟环境中。当我在脚本的顶部使用#!env/latest-env/bin/python
并运行它时,我得到了同样的错误。
我也尝试了venv版本:
activate_this = '/path/to/env/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
型
但这是python 2的,所以错误是NameError: name 'execfile' is not defined
,当我把它改为exec时,我得到了NameError: name 'env' is not defined
。但我知道这是我的路径。
如何在crontab中激活最新的venv来运行脚本?
2条答案
按热度按时间kknvjkwl1#
一旦创建了虚拟环境,环境就在其 /bin 目录中绑定到解释器。
字符串
会做你需要的一切
iyfamqjs2#
我也遇到了类似的挑战,并发现了一种解决方案,可以有效地为每个cron作业设置环境变量,这一点至关重要,因为每个cron作业都是在全新的环境中启动的,每个cron作业可能需要不同的变量。我创建了一个由cron执行的
.sh
脚本,在运行Python脚本之前设置了必要的环境。下面是一个示例脚本:字符串
设置说明:
echo $PATH
的输出设置PATH
。which python
找到。确保此脚本可通过
chmod +x my-cron.sh
执行。Python脚本不需要任何特殊的头文件或元数据,例如:
型
使用
pyenv shims
管理Python版本和依赖项,使用pyenv global 3.9.18 3.11.5
设置全局Python版本。其他Python管理解决方案也可以工作。要将其添加到crontab:
1.在终端中使用
crontab -e
打开crontab。1.像这样定义你的cron作业和脚本路径:
*/1 * * * * /Users/me/my-cron.sh
。(这个例子将每分钟运行一次)1.要保存并退出,请按
ESC
,键入:wq
(write,quit),然后按Enter
。您将看到一条确认消息:“crontab:installing new crontab”。这种方法可以确保Python脚本在正确的环境和依赖项下运行,由
pyenv
管理。