游乐游手机版
首页/编程语言/文章详情

nohup命令实现程序自动重启的完整指南

时间:2026-07-18 06:33
程序自动重启可通过while循环或supervisord实现。while循环简单直接,适合快速测试场景,但缺乏错误处理与监控;supervisord功能全面,提供日志管理、状态监控及自动拉起策略,更稳定可靠,支持多进程管理,适用于生产环境。实际应用中需根据场景权衡,合理选择可提升系统可用性。

在日常系统运维工作中,nohup 命令确实是后台运行程序的得力工具——它能让应用在终端关闭或连接断开后依然稳定运行,避免被 SIGHUP 信号终止。但 nohup 只负责启动,不负责监控与恢复,一旦程序崩溃或正常退出,它不会自动重新拉起进程。那么,如何实现程序的“崩溃自愈”与自动重启?下面两种方案是业界最常用的做法,直接拿来用即可。

如何通过nohup命令实现程序自动重启

方法一:使用 while 循环实现自动重启

最直接简单的办法,就是编写一个死循环脚本,将目标程序包裹在内。例如新建一个 run.sh 文件:

#!/bin/bash
while true; do
  nohup your_command &
  wait $!
  echo "Program exited with code $? , restarting..."
  sleep 5
done

your_command 替换为你要实际运行的命令,然后赋予脚本执行权限,直接运行即可:

chmod +x run.sh
./run.sh

这个脚本的核心逻辑非常清晰:一旦程序退出,等待 5 秒(可自行调整,例如 sleep 10),然后立即重新启动。循环会持续运行,直到你手动终止它。这里使用 wait $! 等待后台进程结束,并捕获退出码,再决定下一步动作。此方法的缺点在于:如果程序频繁崩溃,脚本会不断循环重启,缺乏更精细的控制策略——但对于大多数简单场景,已经足够实用。

方法二:使用 supervisord 进程管理工具

如果你觉得手写循环不够“专业”,或者需要更完善的进程管理功能(例如日志记录、状态监控、自动拉起策略),那么 supervisord 就是标准的选择。它是一款专为后台程序设计的管理守护工具,原生支持自动重启。

首先安装:

# 基于 Debian 的系统
sudo apt-get install supervisor

# 基于 RHEL 的系统
sudo yum install supervisor

安装完成后,创建一个配置文件,例如 /etc/supervisor/conf.d/your_program.conf

[program:your_program]
command=your_command
autostart=true
autorestart=true
stderr_logfile=/var/log/your_program.err.log
stdout_logfile=/var/log/your_program.out.log

your_command 替换为实际命令,日志路径可按需自定义。然后重启 supervisord 使配置生效:

sudo service supervisor restart

此后,supervisord 会自动启动并管理你的程序,一旦程序退出(无论正常还是异常),它都会根据配置执行重启。你还可以设置 autorestart=unexpected 仅对非正常退出进行重启,或者通过 startretries 控制重试次数,灵活性远超 while 循环。

两种方法各有适用场景:追求快速上手、不想引入额外依赖的,用 while 循环即可;生产环境或需要精细化管理的,直接上 supervisor。根据实际需求选择,无需纠结。

来源:https://www.yisu.com/ask/60221658.html
上一篇内存屏障实战案例详解与使用技巧指南 下一篇Android开发新手入门实战教程从零基础到应用上架
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
ASP实战教程精选案例助你快速提升开发技能
编程语言 · 2026-07-18

ASP实战教程精选案例助你快速提升开发技能

本文介绍ASP动态网页开发,通过用户登录、数据分页和文件上传三个案例,解析表单处理、数据库交互及文件管理等关键技术,并探讨数据库优化、代码复用与错误调试等进阶方法,以提升应用性能与健壮性。

Node.js日志压缩的实用方法与高效技巧
编程语言 · 2026-07-18

Node.js日志压缩的实用方法与高效技巧

Node js的zlib模块提供高效的日志文件压缩方案。通过fs创建读写流,结合zlib的gzip管道压缩生成 gz文件,极大缓解磁盘空间压力。该方案代码轻量,易于集成到日志轮转场景,自动压缩旧日志,节省存储成本。

Ubuntu JS日志记录最佳实践:从入门到精通完整指南
编程语言 · 2026-07-18

Ubuntu JS日志记录最佳实践:从入门到精通完整指南

在Ubuntu环境下,Node js日志管理需合理选库(Winston、Pino、Morgan),按环境设置日志级别,采用JSON结构化格式,通过轮转控制文件大小,使用异步写入避免性能损耗,并借助集中式工具(如ELKStack)实现跨服务器监控与告警,同时注意日志安全,防止敏感信息泄露。

nohup命令实战:后台运行提升系统资源利用率
编程语言 · 2026-07-18

nohup命令实战:后台运行提升系统资源利用率

nohup命令通过忽略挂断信号,确保后台任务在终端关闭后持续运行;配合nice命令动态调整进程优先级,结合top命令实时监控资源占用,可有效防止单个进程过度消耗系统资源,从而提升服务器整体利用率和多任务管理效率。

ASP入门教程从零基础到实战常见问题详解
编程语言 · 2026-07-18

ASP入门教程从零基础到实战常见问题详解

ASP是一种服务器端脚本技术,用于动态生成网页。学习需搭建Windows与IIS环境,编写ASP文件并运行。其语法常用VBScript,核心对象如Request、Response处理请求与响应。通过ADO连接数据库,可执行查询并展示数据。常见问题涉及路径设置与数据库权限,调试可用Response Write输出信息。如今ASP主要用于维护旧系统,理解其原理有