首页 > 编程语言 >nohup命令实现程序自动重启

nohup命令实现程序自动重启

来源:互联网 2026-07-19 07:58:08

程序自动重启可通过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。根据实际需求选择合适的方案即可,无需过多纠结。

侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述

热游推荐

更多
湘ICP备14008430号-1 湘公网安备 43070302000280号
All Rights Reserved
本站为非盈利网站,不接受任何广告。本站所有软件,都由网友
上传,如有侵犯你的版权,请发邮件给xiayx666@163.com
抵制不良色情、反动、暴力游戏。注意自我保护,谨防受骗上当。
适度游戏益脑,沉迷游戏伤身。合理安排时间,享受健康生活。