You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CronJob执行Python3脚本时读取config.ini报KeyError问题求助

解决Cron执行Python脚本时找不到config.ini中'terraform' section的问题

你遇到的问题核心是Cron的工作目录和手动执行脚本时的工作目录不一致,导致脚本无法定位到正确的config.ini文件,进而抛出KeyError: 'terraform'错误。

问题原因分析

手动执行脚本时,你的当前工作目录是/opt/scripts/tf_state_backup/,所以os.path.abspath('config.ini')会正确解析为该目录下的配置文件。但Cron默认的工作目录是你的用户Home目录(比如/home/your-user/),此时os.path.abspath('config.ini')会指向~/config.ini——这个文件并不存在,所以configparser读取不到任何配置项,自然触发KeyError。

两种可行的解决方案

方案1:修改脚本,用脚本自身路径拼接配置文件绝对路径

这是最稳妥的方法,无论脚本在哪里执行,都能精准定位到配置文件。修改脚本中读取配置的代码段:

import os
import configparser
import base64

# 获取当前脚本所在的绝对目录
script_dir = os.path.dirname(os.path.abspath(__file__))
# 拼接config.ini的绝对路径
config_path = os.path.join(script_dir, 'config.ini')

config = configparser.ConfigParser()
config.read(config_path)

tfc_token = base64.b64decode(config['terraform']['token']).decode('utf-8')
gitlab_token = base64.b64decode(config['gitlab']['token']).decode('utf-8')

__file__变量会返回当前脚本的绝对路径,通过os.path.dirname提取脚本所在目录,再和config.ini拼接,就能确保找到正确的配置文件。

方案2:修改Crontab条目,先切换到脚本目录再执行

如果你不想改动脚本,可以在Cron命令开头添加切换目录的操作:

*/15 * * * * cd /opt/scripts/tf_state_backup && /usr/bin/python3 tf_state_backup.py >> ~/cron.out 2>&1

cd /opt/scripts/tf_state_backup &&会让Cron先进入脚本所在目录,再执行后续的Python命令,此时脚本中的os.path.abspath('config.ini')就能指向正确的文件路径。

验证方法(可选)

如果你想确认工作目录的差异,可以在脚本中添加一行打印当前工作目录的代码:

print(f"Current working directory: {os.getcwd()}")

等待Cron执行完成后查看~/cron.out的输出,就能看到Cron执行时的工作目录确实是你的Home目录,而非脚本所在目录。

内容的提问来源于stack exchange,提问作者fraserc182

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 17:32:34