如何通过Shell脚本实现AWS Linux实例每周一自动重启?
AWS EC2实例每周一定期重启最优方案
分两类实现方案,优先推荐AWS云原生无运维的方案,其次是你要求的服务器本地脚本方案:
方案1:AWS EventBridge + IAM 原生方案(优先推荐)
不需要在你的实例上部署任何脚本,不需要依赖实例自身的网络、进程状态即可执行,可靠性更高。
- 首先创建拥有EC2重启权限的IAM角色:权限策略添加
ec2:RebootInstances操作,资源指定你的实例ARN即可,避免权限溢出。 - 打开AWS EventBridge控制台,创建新的规则:
- 规则类型选「定时规则」
- cron表达式填
0 12 ? * MON *(可以按需修改时区和具体时间,示例为每周一UTC时间12点触发) - 目标类型选「AWS服务」→「EC2 Reboot API调用」
- 选择你要重启的实例ID,关联之前创建的IAM角色即可。
这个方案不需要维护脚本,触发成功率远高于本地脚本,也不需要消耗实例自身的资源。
方案2:服务器本地crontab + AWS CLI 脚本方案(符合你要求的服务器内运行实现)
适合不想额外配置云服务的场景:
- 首先在实例上安装AWS CLI,执行
aws configure配置拥有EC2重启权限的AK/SK,或者给实例绑定拥有重启权限的IAM角色(更安全,不需要硬编码密钥)。 - 编写重启脚本,内容如下:
#!/bin/bash # 替换为你的实例ID INSTANCE_ID="i-xxxxxxxxxxxxxx" aws ec2 reboot-instances --instance-ids $INSTANCE_ID # 可选:添加日志记录 echo "[$(date)] 实例重启指令已发送" >> /var/log/ec2_reboot.log
- 给脚本添加执行权限:
chmod +x /path/to/your/reboot_script.sh - 配置crontab定时任务,执行
crontab -e添加如下行:
0 12 * * 1 /path/to/your/reboot_script.sh
示例为每周一本地时间12点执行,你可以根据需求调整时间字段。
注意事项:如果用本地脚本方案,需要确保crond服务一直正常运行,实例的IAM权限/AK密钥没有过期,否则会触发失败。
内容的提问来源于stack exchange,提问作者Faiz P
相关产品推荐
相关产品推荐

