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

AWS CLI版本检查脚本手动正常但crontab执行失败求助

问题分析与解决建议

核心问题

  1. Cron环境差异:Cron执行时使用极简环境变量,缺少交互式Shell中的Locale(编码)设置,导致升级后的AWS CLI(基于Python/PyInstaller打包)在处理文本编码时抛出UnicodeEncodeError。
  2. 脚本命令数组使用错误:当前脚本中myCmd数组的定义方式不符合Bash数组的正确用法,可能引发潜在的命令解析问题。

1. 确认Cron的运行环境(SLES系统)

要查看Cron使用的环境变量,可创建临时Cron任务导出环境:

# 执行crontab -e编辑root的定时任务,添加以下内容
* * * * * env > /tmp/cron_root_env.txt

等待1分钟后查看/tmp/cron_root_env.txt,对比交互式Shell下的env输出(执行env > /tmp/root_interactive_env.txt),重点关注LANG、LC_*等Locale相关变量——Cron默认通常不会设置UTF-8编码。


2. 修复脚本与编码问题

方案一:在脚本中强制设置UTF-8 Locale

修改脚本,在开头添加Locale设置,并修正命令数组用法:

#!/usr/bin/env bash

# 强制设置UTF-8编码环境
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8

# 查找AWS CLI路径
if [ -e "/usr/local/bin/aws" ]; then
    myAWS="/usr/local/bin/aws"
else
    myAWS="/usr/bin/aws"
fi

# 正确定义命令数组(每个参数为单独元素)
myCmd=("${myAWS}" "--version")

# 打印命令
echo "${myCmd[@]}"

# 执行命令并捕获输出
message=$("${myCmd[@]}")

echo "$message"

方案二:在Crontab中直接指定Locale

如果不想修改脚本,可在Cron任务中直接添加环境变量:

57 21 * * * LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 /rough/scripts/log/test.sh > /rough/scripts/log/test.log 2>&1

3. 为什么重装AWS CLI无效?

该错误并非AWS CLI本身的问题,而是Cron环境缺少必要的编码配置,导致Python运行时无法正确处理文本编码。重装CLI不会改变Cron的环境变量设置,因此无法解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 21:54:58