要在云服务器上让app保持24小时运行,最简单的办法是使用nohup命令配合后台运行符,但更稳定可靠的是用systemd配置成服务并设置开机自启。 下面从基础到进阶,逐步拆解每种方法,并针对酷番云、简米云等常见云服务器给出实操建议。
云服务器挂app一直运行:基础操作
使用nohup命令忽略挂断信号
当你通过SSH登录云服务器执行app时,SSH终端关闭会发送SIGHUP信号导致进程终止,nohup命令可以忽略该信号,使进程继续运行,基本语法:
nohup your_command &> output.log &
&让进程在后台运行。&> output.log将标准输出和错误输出重定向到文件。- 执行后返回PID,关闭终端后进程依然在跑。
需要注意的细节:如果你忘记重定向输出,nohup会自动在当前目录创建nohup.out文件,随着时间推移可能占满磁盘,建议指定日志路径,并用2>&1合并错误流。
nohup python3 /data/app.py > /data/log/app.log 2>&1 &
使用ps aux | grep app.py确认进程存在,这种方法适合临时任务,比如跑一个爬虫脚本或训练模型,但缺点是没有管理机制,如果进程意外退出,不会自动重启。
用screen创建持久终端会话
如果说nohup是“隐身术”,那么screen就是“独立空间”,你可以在screen中启动app,然后分离(detach)会话,即使关闭SSH,app也会在screen内继续运行。
screen -S mysession
# 运行你的app,比如python app.py
# 按 Ctrl+A 然后按 D 分离会话
重新连接使用screen -r mysession,screen非常适合需要交互式的app,比如游戏服务器或需要持续输入的命令。
常用管理命令:
screen -ls列出所有会话。screen -d -r 会话ID断开旧连接并重新附加。- 在screen内按
Ctrl+A K关闭会话,按Ctrl+A C新建窗口。
不足之处:screen/tmux虽然稳定,但需要手动管理会话,如果云服务器重启,会话会丢失,除非设置保存脚本,不过对于日常调试和短期任务,它是最灵活的工具。
tmux替代方案
tmux是screen的现代替代品,功能类似,配置更灵活,安装后用
tmux new -s mysession创建会话,Ctrl+B D分离,tmux attach -t mysession重连,tmux支持分屏,适合同时管理多个进程。
云服务器运行程序不中断:systemd终极方案
创建自定义systemd服务文件
对于需要长期稳定运行、甚至随系统启动的app,systemd是Linux标准服务管理器,几乎所有主流云服务器镜像(如Ubuntu、CentOS)都预装systemd,业内共识认为,systemd是Linux服务管理的事实标准,生产环境首选。
创建一个服务文件,例如/etc/systemd/system/myapp.service:
[Unit]
Description=My App Service
After=network.target
[Service]
ExecStart=/usr/bin/python3 /path/to/app.py
WorkingDirectory=/path/to
Restart=always
RestartSec=10
User=your_user
Group=your_group
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
关键参数解释:
ExecStart:指定启动命令,必须使用绝对路径。Restart=always:进程退出时自动重启,间隔RestartSec秒,如果想让进程在失败时重启,可以用on-failure。User/Group:以指定用户运行,避免权限风险。StandardOutput=journal:日志输出到journald,方便查看。
然后执行:
systemctl daemon-reload
systemctl enable myapp.service # 开机自启
systemctl start myapp.service
日志查看与监控
使用journalctl -u myapp.service -f实时查看日志,如果app崩溃,systemd会自动拉起,无需手动干预,你还可以结合systemd-tmpfiles清理日志,避免磁盘占满。
如何验证服务状态:用systemctl status myapp.service查看运行状态、最近日志和资源占用,如果服务反复重启,系统会显示Active: activating (auto-restart),此时需要检查日志找出原因。
高级重启策略
Restart=always:无论退出码如何,都重启。Restart=on-failure:仅当非零退出码或信号终止时重启。Restart=on-abnormal:仅被信号终止时重启。
对于绝大多数app,on-failure更合适,避免因手动停止服务而自动重启,同时设置RestartSec=5,防止频繁重启造成资源浪费。
酷番云服务器跑脚本后台运行:实战要点
安全组与端口配置
假设你的app需要监听某个端口(比如8060),在酷番云控制台需要添加安全组入站规则,允许该端口访问,检查云服务器内部防火墙(如ufw、firewalld)是否放行。
常见坑:配置了安全组,但忘记在内部防火墙放行,导致端口无法访问,建议先关闭防火墙或添加规则后再测试。
弹性公网IP绑定
如果app需要对外提供服务,需要为云服务器绑定弹性公网IP,并确保IP是静态的,酷番云上,弹性公网IP可以解绑再绑定,方便迁移,注意:如果云服务器欠费或关机,弹性公网IP可能会被回收,导致服务中断。
实例规格选择
长期运行的app,推荐选择标准型实例,内存至少2G,以避免内存不足被OOM Killer杀死,如果需要高并发,可以考虑计算型或网络增强型,对于高I/O的应用,比如数据库,选用SSD云硬盘提升性能。
计费模式:如果是长期24小时运行,包年包月比按量计费划算很多,按量计费适合短期测试,但记得设置余额告警,避免欠费停机。
简米云服务器部署应用持久化:常见问题
很多用户第一次在简米云上部署app时,会遇到进程跑一会儿就没了,或者重启后丢失,这里列出几个关键点:
- 使用ECS控制台的重置实例功能会清空所有数据,包括你的app和配置。
- 数据盘建议挂载到数据盘,系统盘尽量不要存放重要数据,避免系统重装后丢失。
- 使用快照策略定期备份数据,别等出问题再后悔。
区分不同镜像:简米云公共镜像中,CentOS 7使用systemd,但同时保留/etc/rc.local,如果你习惯旧方法,可以在/etc/rc.local中添加启动命令,但需要确保该文件有执行权限,不过还是推荐统一用systemd服务文件。
云服务器app持久化运行设置:安全与监控
防止内存不足导致进程被kill
云服务器内存有限,当系统内存耗尽时,OOM Killer会挑选进程进行终止,你的app可能首当其冲,解决办法:
- 增加云服务器内存配置。
- 为app设置内存限制,例如使用
ulimit或cgroup。 - 开启swap分区,但注意swap性能较差,仅作为最后防线。
用dmesg | grep -i oom查看是否有被kill的记录。
使用监控工具及时发现问题
- 云服务商提供的基础监控(如CPU、内存、网络)可以设置告警。
- 在系统层面,可以用
htop实时查看进程资源,du -sh检查日志文件大小。 - 对于重要服务,建议编写健康检查脚本,通过crontab定期调用,若服务异常则自动重启或发送通知。
权限与安全最小化
不要用root用户运行app,创建专用用户并赋予最小权限,如果app需要监听1024以下端口,可以通过setcap或authbind赋予权限,或者使用nginx反向代理,避免暴露高危端口,只开放必要的端口到公网。
云服务器挂app一直运行:Q&A
云服务器挂app一直运行,用screen还是systemd?
两者用途不同,screen适合需要交互的临时任务,或者你不想写服务文件,systemd适合长期、稳定、需要自动重启的生产级应用,如果你希望app在系统重启后自动运行,必须用systemd或类似的init脚本,screen更适合开发调试和短期任务。
如何确认app确实在后台运行?
使用ps aux | grep your_app查看进程,如果用了systemd,systemctl status your_app更直观,它会显示进程ID、运行时间和最近日志,不要只看进程,还要检查端口监听:netstat -tulpn | grep 端口号,如果服务对外提供HTTP,也可以用curl测试页面是否正常返回。
进程频繁被kill,可能是什么原因?
最常见的原因是内存不足,系统OOM Killer选择杀死进程,可以查看dmesg | grep -i oom确认,解决方案是增加内存或优化app内存使用,云服务器安全策略也可能限制某些行为,但极少见,如果进程在系统空闲时也被kill,可以检查/var/log/messages或journalctl,看是否有其他服务或cron任务触发。
让app在云服务器上一直运行,没有银弹,但根据场景选择合适工具:临时任务用nohup/screen,重要服务用systemd,同时注意云服务商的安全组、弹性IP和实例选型,确保运行环境稳定,只要掌握了这些方法,你的app就能成为云上的“永动机”。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/578919.html




