如何在AWS EC2 Ubuntu中编写bash脚本持续运行Python程序
完全对等功能的Bash脚本
你需求的和Windows批处理逻辑100%一致(程序无论因任何原因退出,都立刻无条件重启)的bash脚本写法如下:
创建名为restart_collector.sh的脚本文件,写入以下内容:
#!/bin/bash # 无限循环,等价于Windows批处理的 :1 + goto 1逻辑 while : do python3 datacollection.py done
使用步骤
- 给脚本添加执行权限:
chmod +x restart_collector.sh - 直接执行脚本即可生效:
./restart_collector.sh
实用优化方案
上述基础脚本完全匹配你的原始需求,实际生产环境中可以补充以下优化,避免极端情况影响系统稳定性:
1. 增加重启间隔
如果程序持续秒崩,无限循环会占用大量CPU资源,可添加重启延迟,比如每次退出后等待3秒再重启:
#!/bin/bash while : do python3 datacollection.py sleep 3 done
2. 配置systemd托管(推荐用于EC2生产环境)
裸跑脚本无法实现EC2实例重启后自动恢复任务,也不支持后台运行、日志留存,可通过systemd配置系统服务实现更稳定的托管:
- 新建service配置文件:
sudo nano /etc/systemd/system/datacollector.service - 写入以下配置(需替换路径和用户为你实际的EC2环境配置):
[Unit] Description=API数据采集服务 After=network.target [Service] # 替换为你的EC2运行用户名,默认Ubuntu镜像的默认用户为ubuntu User=ubuntu # 替换为你的datacollection.py脚本所在的目录绝对路径 WorkingDirectory=/home/ubuntu/projects/data_collect ExecStart=/usr/bin/python3 datacollection.py # 无论任何退出状态都自动重启 Restart=always # 重启间隔3秒 RestartSec=3 # 日志输出到系统journal StandardOutput=journal+console StandardError=journal+console [Install] WantedBy=multi-user.target
- 执行以下命令启用服务:
- 重载systemd配置:
sudo systemctl daemon-reload - 开启开机自启:
sudo systemctl enable datacollector.service - 启动服务:
sudo systemctl start datacollector.service
- 常用运维命令:
- 查看实时运行日志:
sudo journalctl -u datacollector.service -f - 停止服务:
sudo systemctl stop datacollector.service - 重启服务:
sudo systemctl restart datacollector.service
内容的提问来源于stack exchange,提问作者Mantra
相关产品推荐
相关产品推荐

