从crontab在virtualenv中运行python方法

从crontab在virtualenv中运行python方法,python,python-3.x,cron,virtualenv,ubuntu-20.04,Python,Python 3.x,Cron,Virtualenv,Ubuntu 20.04,我目前正在努力研究如何通过crontab在虚拟环境中从python文件运行方法 我有一个目录,如下所示:/home/ubuntu/project有文件file.py 以及其中的文件夹venv。在file.py中有一个method(),我希望通过crontab,使用python和虚拟环境的依赖项定期执行该方法 我已经发现我需要在虚拟环境中使用python,因此 python3 我用 /home/ubuntu/project/venv/bin/python3 现在,我还找到了如何从命令行运行方法的答

我目前正在努力研究如何通过crontab在虚拟环境中从python文件运行方法

我有一个目录,如下所示:
/home/ubuntu/project
有文件
file.py
以及其中的文件夹
venv
。在
file.py
中有一个
method()
,我希望通过crontab,使用python和虚拟环境的依赖项定期执行该方法

我已经发现我需要在虚拟环境中使用python,因此

python3

我用

/home/ubuntu/project/venv/bin/python3

现在,我还找到了如何从命令行运行方法的答案,即via

python3-c'导入foo;打印foo.hello()'

我曾试图将两者结合起来,但不幸的是

/home/ubuntu/project/venv/bin/python3-c'import/home/ubuntu/project/file;打印(file.method())'

是无效语法。也

/home/ubuntu/project/venv/bin/python3-c'from/home/ubuntu/project/import文件;打印(file.method())'

只会导致错误。另一方面,

/home/ubuntu/project/venv/bin/python3-c'导入文件;打印(file.method())'

导致找不到文件

我如何正确地做到这一点


非常感谢您考虑这个问题。

导入的参数不是文件名。最简单的解决方法可能是将
cd
放入目录,然后使用虚拟环境的Python解释器运行脚本

42 17 * * * cd project && ./venv/bin/python3 -c 'import file; file.method()'
从主目录为
/home/ubuntu
的用户的
crontab

更一般地说,您要从中导入的目录需要位于
PYTHONPATH
上,因此您可以将其等效地设置到目录中,而不是
cd
。第三种方法是将
file.py
中的代码制作成可安装的模块,并将其安装在虚拟环境中。对于一次性的,这可能是一件不必要的琐事,但它肯定是最稳健和可持续的解决方案