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

EC2中使用Crontab调度Python脚本时环境变量KeyError问题求助

解决Cron任务无法读取环境变量的问题

核心原因

Cron运行的是非交互式、非登录Shell,不会自动加载~/.bashrc这类交互式Shell的配置文件,所以你在.bashrc里设置的环境变量对Cron任务不可见。

解决方法

方法1:在Cron任务行直接导出环境变量

直接在Cron命令前添加export语句,把需要的变量传给后续的Python脚本:

*/5 * * * * export GOOGLE_APPLICATION_CREDENTIALS="/home/ubuntu/.hiddendirectory/keyfile.json" && export AWS_ACCESS_KEY_ID="你的AWS密钥ID" && export AWS_SECRET_ACCESS_KEY="你的AWS密钥"; /usr/bin/python3 /home/ubuntu/Python/function.py args >> /var/log/logfile.log 2>&1

方法2:通过环境变量文件统一加载

  1. 创建一个专门存放环境变量的文件(比如~/.cron_env),写入需要的变量:
    # ~/.cron_env
    export GOOGLE_APPLICATION_CREDENTIALS="/home/ubuntu/.hiddendirectory/keyfile.json"
    export AWS_ACCESS_KEY_ID="你的AWS密钥ID"
    export AWS_SECRET_ACCESS_KEY="你的AWS密钥"
    
  2. 修改Cron任务,先加载这个文件再执行脚本:
    */5 * * * * source /home/ubuntu/.cron_env && /usr/bin/python3 /home/ubuntu/Python/function.py args >> /var/log/logfile.log 2>&1
    
    注意这里必须用文件的绝对路径,因为Cron的默认工作目录不一定是用户家目录。

方法3:在Crontab配置开头定义环境变量

直接在crontab -e编辑的内容最上方添加变量定义,Cron会自动把这些变量传给所有任务:

# Crontab配置开头添加
GOOGLE_APPLICATION_CREDENTIALS="/home/ubuntu/.hiddendirectory/keyfile.json"
AWS_ACCESS_KEY_ID="你的AWS密钥ID"
AWS_SECRET_ACCESS_KEY="你的AWS密钥"

# 你的定时任务
*/5 * * * * /usr/bin/python3 /home/ubuntu/Python/function.py args >> /var/log/logfile.log 2>&1

额外提示(针对AWS凭证)

除了环境变量,你也可以确保Cron运行的用户(这里是ubuntu)的~/.aws/credentials文件存在且权限正确(建议设置为chmod 600 ~/.aws/credentials),botocore会自动读取这个文件里的凭证,无需额外设置环境变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:03:30