nohup 命令可以让程序在后台运行,即使关闭终端或断开连接也不会停止。但是,nohup 本身并不提供自动重启功能。要实现程序的自动重启,你可以结合使用 nohup 和其他工具,例如 while 循环或者 supervisord。
while 循环创建一个 shell 脚本,如 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 5 中的数字来调整)然后重新启动程序。
supervisordsupervisord 是一个进程管理工具,可以用来管理和自动重启程序。首先,你需要安装 supervisord:
# 对于基于 Debian 的系统
sudo apt-get install supervisor
# 对于基于 RHEL 的系统
sudo yum install supervisor
接下来,创建一个 supervisord 配置文件,例如 /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 会自动启动并管理你的程序,如果程序退出,它会自动重启。
这两种方法都可以实现程序的自动重启。你可以根据自己的需求选择合适的方法。