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

如何让AWS EC2 Ubuntu实例启动时以ec2-user运行Python脚本

解决AWS EC2 Ubuntu实例启动时以ec2-user执行Python脚本的问题

核心问题根源

切换到ec2-user时使用的是非登录shell,未加载该用户的环境配置文件(如.profile、.bashrc),导致PATH等环境变量缺失,无法找到Python、chromedriver等依赖程序。

具体解决方案

方法1:通过登录shell切换执行(最简单直接)

在用户数据中使用su的-l参数(模拟登录shell)或sudo的-i参数,强制加载ec2-user的完整环境:

# 使用su的方式
su - ec2-user -c "cd /实际脚本目录 && python myscript.py"

# 或使用sudo的方式
sudo -i -u ec2-user bash -c "cd /实际脚本目录 && python myscript.py"

替换/实际脚本目录为你的myscript.py所在的真实路径。

方法2:手动指定环境变量执行

如果不想依赖登录shell,可以先登录ec2-user执行echo $PATH拿到完整路径,再在用户数据中手动注入环境变量:

sudo -u ec2-user bash -c 'export PATH="/home/ec2-user/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" && cd /实际脚本目录 && python myscript.py'

把上述PATH值替换为你从ec2-user账户中获取的真实路径。

方法3:创建systemd服务(适合长期后台运行的脚本)

如果脚本需要持续运行,推荐用systemd管理,稳定性更高:

  1. 在用户数据中写入服务配置文件:
cat <<EOF > /etc/systemd/system/myscript.service
[Unit]
Description=Run myscript.py as ec2-user
After=network.target

[Service]
User=ec2-user
Group=ec2-user
WorkingDirectory=/实际脚本目录
ExecStart=/home/ec2-user/.local/bin/python myscript.py
Restart=always

[Install]
WantedBy=multi-user.target
EOF
  1. 启用并启动服务:
systemctl daemon-reload
systemctl enable myscript.service
systemctl start myscript.service

替换WorkingDirectory为脚本所在目录,ExecStart中的Python路径用which python在ec2-user账户下查询到的真实路径。

验证执行状态

可以在用户数据中添加日志输出,方便排查问题:

su - ec2-user -c "python --version && which python && which chromedriver" >> /var/log/myscript_startup.log 2>&1

后续可通过查看/var/log/myscript_startup.log确认环境是否加载正常。

内容的提问来源于stack exchange,提问作者Dr-Nuke

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 15:22:07