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

如何在AWS EC2 Ubuntu实例运行Python脚本及解决启动脚本异常

问题2:EC2 UserData自动执行Python脚本无效的调整方案

我一看你的UserData写法就知道问题出在哪了,先给你分析原因,再给具体解决办法:

问题根源

  1. UserData默认以root身份执行:你写的cd ~/env/xxx/bin/里的~指向root的家目录(/root/),但你的conda环境肯定是在ubuntu用户的家目录(/home/ubuntu/)下,路径完全不匹配,自然找不到文件。
  2. 命令未正确分隔:所有命令挤在一行,Shell会把它们当成单个命令执行,必然报错。
  3. 环境变量不匹配:root用户的环境变量里没有conda的配置,就算路径对了,source activate也无法正常激活环境。

调整方案

方案一:切换到ubuntu用户执行(推荐)

把你的UserData改成下面这样,确保命令在ubuntu用户的环境下运行:

#!/bin/bash
# 切换到ubuntu用户并执行后续命令
su - ubuntu <<EOF
cd /home/ubuntu/env/xxx/bin/
source activate
python3.6 /home/ubuntu/env/xxx/source/test.py
EOF
  • su - ubuntu会完全切换到ubuntu用户的环境,包括加载该用户的.bashrc/.profile,确保conda配置生效。
  • 用<<EOF和EOF包裹命令,保证所有操作都在ubuntu用户的会话中执行。
  • 全部使用绝对路径,彻底避免~带来的路径歧义。

方案二:用绝对路径直接执行

如果不想切换用户,可以先给conda环境目录加权限,再用绝对路径执行:

#!/bin/bash
# 给ubuntu用户的环境目录加可读可执行权限,让root能访问
sudo chmod -R 755 /home/ubuntu/env/
# 用绝对路径激活conda环境
source /home/ubuntu/env/xxx/bin/activate
# 运行脚本
python3.6 /home/ubuntu/env/xxx/source/test.py

排查小技巧

每次实例启动后,UserData的执行日志会存在/var/log/cloud-init-output.log里,登录abc2后可以查看日志定位具体错误:

cat /var/log/cloud-init-output.log

日志会明确告诉你是路径错误还是命令执行失败,帮你快速解决问题。


内容的提问来源于stack exchange,提问作者Rick.Wang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:32:26