当前位置: 首页 > 知识库问答 >
问题:

python - crontab在CentOS7.9 Python虚拟环境中定时执行报错,寻求解决方案?

谷永贞
2023-11-24

服务系统:CentOS7.9
Python环境:Python3.8.6
项目背景:收银台自动化脚本
我在CentOS7 中创建了一个虚拟环境,自动化交是可以正常执行的。但是当我打算用crontab做定时任务的时候,一直报错。脚本里面用到的这个Browsermob-Proxy是一个代理,可以理解为抓包用的。

ImportError while loading conftest '/home/lawrence/workcode/Auto_Cashierx/conftest.py'.conftest.py:7: in <module>    from common.proxy_manager import ProxyManagercommon/proxy_manager.py:51: in <module>    ProxyManager()common/proxy_manager.py:26: in __init__    self.server.start()venv/lib/python3.8/site-packages/browsermobproxy/server.py:127: in start    raise ProxyServerError("Can't connect to Browsermob-Proxy")E   browsermobproxy.exceptions.ProxyServerError: Can't connect to Browsermob-Proxy/bin/sh: allure: 未找到命令/bin/sh: allure: 未找到命令Traceback (most recent call last):  File "run_case.py", line 88, in <module>    get_result()  File "run_case.py", line 39, in get_result    with open("report.json", "r", encoding="utf-8") as f:FileNotFoundError: [Errno 2] No such file or directory: 'report.json'

(PS: ‘allure: 未找到命令’ ,从这往下都不影响程序执行)

我试过很多种办法,包括直接在crontab里面定义

0 8,15,21 * * * source /home/lawrence/workcode/Auto_Cashier/venv/bin/activate && /home/lawrence/workcode/Auto_Cashier/venv/bin/python3 /home/lawrence/workcode/Auto_Cashier/run_case.py

或者是在sh脚本里面编写

#!/bin/bashcd /home/lawrence/workcode/Auto_Cashierx/venv/source ./bin/activatecd /home/lawrence/workcode/Auto_Cashierxvenv/bin/python run_case.pydeactivate >> /tmp/cron_output.log 2>&1

但最终都会报上面的错误。我直接把crontab里面的内容复制出来,是可以正常执行的。找了一天,没找到解决办法。请求各位的帮助。

共有2个答案

梅庆
2023-11-24

crontab默认的工作路径是用户的家目录。你的程序 open("report.json", "r", encoding="utf-8") 这里读取的是一个相对目录下的文件,所以会报找不到文件。
读取 report.json 变成了读取 /用户目录/report.json 这个文件了。

所以可以改成这样子:

0 8,15,21 * * * cd /home/lawrence/workcode/Auto_Cashier && ./venv/bin/python3 run_case.py

你把运行步骤放在sh脚本里面执行,这个看上去是没问题的。

巫晋鹏
2023-11-24

这个问题似乎与在 CentOS 7.9 的 Python 虚拟环境中执行定时任务有关,并且涉及到 crontab。错误日志显示,程序在尝试启动 Browsermob-Proxy 时出错,并且找不到 'allure' 命令。此外,还有一个文件 'report.json' 找不到的问题。

下面是一些可能的解决方案:

  1. 确保 Browsermob-Proxy 正在运行:错误日志显示,ProxyManager() 在尝试启动 Browsermob-Proxy 时出错。请确保 Browsermob-Proxy 正在运行,或者检查其配置是否正确。
  2. 检查环境变量:在虚拟环境中运行脚本时,需要确保所有的依赖项都在正确的位置。你可以尝试在脚本中打印环境变量,检查是否所有的路径和库都已正确设置。
  3. 检查 'allure' 命令:错误日志显示,找不到 'allure' 命令。你需要确认是否已经在你的环境中安装了 Allure。如果没有,你需要安装它。你可以在你的虚拟环境中使用以下命令安装 Allure:pip install allure-pytest
  4. 检查 'report.json' 文件:另一个错误是找不到 'report.json' 文件。你需要确认这个文件是否在你的脚本尝试读取它的位置存在。如果不在,你需要将它移动到正确的位置,或者修改你的脚本以从另一个位置读取它。
  5. 在 crontab 中使用绝对路径:在你的 crontab 命令中,你正在尝试使用源码路径来运行你的脚本和激活你的虚拟环境。这可能会引发问题,因为你的环境变量可能没有正确设置,或者你的虚拟环境可能没有安装在预期的位置。你可以尝试在你的 crontab 命令中使用脚本和虚拟环境的绝对路径。
  6. 将错误重定向到文件:在你的 crontab 命令中,你可以将错误重定向到一个文件,以便于你查看详细的错误信息。例如,你可以将你的命令修改为:0 8,15,21 * * * source /home/lawrence/workcode/Auto_Cashier/venv/bin/activate && /home/lawrence/workcode/Auto_Cashier/venv/bin/python3 /home/lawrence/workcode/Auto_Cashier/run_case.py 2>> /tmp/cron_error.log

希望这些建议能帮助你解决问题!

 类似资料:
  • 这份教程是帮助你安装和使用 Python 的包 本指南会告诉你如何安装和使用必要的工具。值得注意的是 Python 可以做许多许多的事情,至于你如何去安装和管理你的依赖可能会根据你项目的不同而不同。这份指南更多是开发和部署网络服务(包括 web 应用),但是这份指南同样适用于帮助你管理任何项目的开发和测试环境。 注意:这份指南是在 Python 3 版本下完成的,如果你由于不可抗拒的原因仍然在使用

  • python 的虚拟环境可以为一个 python 项目提供独立的解释环境、依赖包等资源,既能够很好的隔离不同项目使用不同 python 版本带来的冲突,而且还能方便项目的发布。 virtualenv virtualenv可用于创建独立的 Python 环境,它会创建一个包含项目所必须要的执行文件。 安装 virtualenv $ pip install virtualenv 配置 pip 安装第

  • 在视窗和蟒蛇 3.9x 中运行 VS 代码 我创建了一个新的项目文件夹,并为此项目创建了一个新的虚拟环境。我创建的第一个脚本是一个 .ipynb 文件(jupyter 笔记本),它工作正常。当我将脚本导出到.py文件时,它在第一行代码上生成错误: < code >从pynput导入键盘 模块未发现错误: 没有名为“pynput”的模块 pynput库安装在这个虚拟环境中,这就是. ipynb文件运

  • 我主要用python编程,并且有一些虚拟环境方面的经验。我是新的软件,并开始寻找docker来运行我的代码。我想了解它的功能和工作原理。 据我所知,docker容器就像虚拟环境,在执行时运行一组指令,可以将其中包含的所有内容视为一个实体(因此它或其他内容不会相互制约?)。当我读到更多关于容器的内容时,它们听起来非常完美,可以消除对虚拟环境的任何需求,但仍然不确定。如果能澄清一下,我将不胜感激,因为

  • 问题内容: 从代码移动到新机器(可能运行不同的OS)相对简单并且给出相同结果的意义上来说,主要的工作之一就是确保代码的可移植性。 来自Python背景,我习惯了虚拟环境的概念。与所需软件包的简单列表一起使用时,这可以确保安装的软件包和库在任何计算机上都可用,而不会引起太多麻烦。当然,这不能保证- 不同的操作系统都有自己的缺点和特点-但这可以为您提供95%的解决方案。 R中是否存在这样的东西?即使它

  • 我一直在使用Spyder安装的Anaconda发行版,默认使用Python 2.7。目前我需要用Python 3.4设置一个开发虚拟环境。 在线调查后的两大建议是: 首先设置虚拟环境,并指向更改Spyder的首选项,例如这里; 在虚拟环境中安装所有Spyder依赖项,如PyQt4,例如这里; 这两项建议都很繁琐,看起来不像是明智的发展选择。 是否有一个解决方案,将允许运行Spyder所需的Pyth