发布于2026-06-16 阅读(0)
扫一扫,手机访问
nohup 命令本身的特点,就是让进程在用户退出登录后依然能继续运行——但注意,它并不内置自动重启功能。换句话说,进程一旦意外退出,它就真的“退”了,不会自己回来。那么,想让进程挂了之后自动复活,该怎么办?常见的有两种思路:一种是靠脚本里的 while 循环自己兜底,另一种是借助专业的进程管理工具 supervisord 来监控和重启。下面分别展开。

while 循环实现简单重启这种方法最直接,不需要额外安装任何工具。核心思路是:写一个 Shell 脚本,里面套一个死循环,每次用 nohup 启动目标进程,然后等它结束;一旦结束,就自动重启,中间可以加个短暂的休眠。
来看一个示例脚本:
#!/bin/bash
# 要运行的命令
COMMAND="your_command_here"
# 无限循环
while true; do
# 使用 nohup 运行命令,并将输出重定向到文件
nohup $COMMAND > output.log 2>&1 &
# 获取刚刚启动的进程的 PID
PID=$!
# 等待进程结束
wait $PID
# 输出提示信息
echo "Process $PID exited with status $? - restarting"
# 等待一段时间(例如 5 秒)再重新启动
sleep 5
done
把这个脚本保存为 restart_on_exit.sh,然后 chmod +x restart_on_exit.sh 赋予执行权限,最后直接运行:
./restart_on_exit.sh
好处是简单,坏处是循环本身也会消耗一点资源,而且如果进程频繁崩溃,它就会不停重启,缺乏更精细的控制。
supervisord 来专业管理如果你需要更可靠、更易维护的方案,supervisord 是行业里常用的选择。它是一个进程管理工具,专门负责监控进程,并且能在进程异常退出时自动重启。用起来分几步走:
安装 supervisord
大多数 Linux 发行版都能直接通过包管理器安装。比如在 Ubuntu 上:
sudo apt-get update
sudo apt-get install supervisor编写配置文件
在 /etc/supervisor/conf.d/ 目录下新建一个配置文件,例如 your_command.conf,内容如下:
[program:your_command]
command=your_command_here
autostart=true
autorestart=true
stderr_logfile=/var/log/your_command.err.log
stdout_logfile=/var/log/your_command.out.log
记得把 your_command_here 替换成你实际要运行的命令。
启动 supervisord
执行:
sudo supervisord -c /etc/supervisor/supervisord.conf
这样 supervisord 会加载所有配置文件,并开始管理进程。
日常管理进程
通过 supervisorctl 命令可以轻松控制:
sudo supervisorctl start your_command
sudo supervisorctl stop your_command
sudo supervisorctl status your_command相比 while 循环,supervisord 提供了更丰富的功能:支持多进程管理、日志轮转、进程组控制等,适合生产环境。而 while 循环则胜在零依赖、轻量快捷。到底选哪个,取决于你的实际场景——想要省事就上脚本,想要省心就用工具。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8