如何在AWS EC2实例启动时自动运行start.sh脚本
解决AWS EC2开机自动在Screen中运行start.sh的问题
原脚本的问题
- Cloud-init本身以root权限执行User data,不需要
sudo su,这条命令会创建子shell,后续命令在子shell执行完后就随子shell退出,导致screen会话无法留存。 - 直接运行
screen是交互式启动逻辑,而cloud-init的执行环境是非交互式的,无法创建前台会话,必须用后台启动参数。 cd命令未明确指定到root家目录(/root),非交互环境下可能无法正确切换到目标路径。
修正后的User data脚本
#!/bin/bash # 创建后台分离模式的screen会话(命名为mysession),并在其中执行start.sh screen -dmS mysession /root/start.sh
关键说明
-dmS:d表示后台分离运行,m强制创建新会话,S指定会话名称(方便后续查看和连接)。- 使用
/root/start.sh绝对路径,避免路径切换的不确定性,确保脚本能被准确定位执行。
验证步骤
- 实例重启后,连接EC2执行
screen -ls,查看是否存在名为mysession的活跃会话。 - 要进入会话查看脚本输出,执行
screen -r mysession。 - 排查执行日志请查看
/var/log/cloud-init-output.log,该日志会记录User data脚本的所有输出和错误,比cloud-init.log更适合定位问题。
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

