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

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

服务系统: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 ProxyManager

common/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/bash

cd /home/lawrence/workcode/Auto_Cashierx/venv/

source ./bin/activate

cd /home/lawrence/workcode/Auto_Cashierx

venv/bin/python run_case.py

deactivate >> /tmp/cron_output.log 2>&1

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


回答:

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脚本里面执行,这个看上去是没问题的。

以上是 crontab在CentOS7.9 Python虚拟环境中定时执行报错,寻求解决方案? 的全部内容, 来源链接: utcz.com/p/939069.html

回到顶部