nohup 命令本身并不提供自动重启功能。它的主要作用是在用户退出登录后,继续运行指定的命令或程序。如果你希望在使用 nohup 的同时实现自动重启,可以考虑以下几种方法:
方法一:使用 supervisord
supervisord 是一个进程管理工具,可以监控和管理多个进程,并在进程退出时自动重启。
-
安装
supervisord:sudo apt-get install supervisor # Debian/Ubuntu sudo yum install supervisor # CentOS/RHEL -
配置
supervisord: 创建一个新的配置文件,例如/etc/supervisor/conf.d/myapp.conf:[program:myapp] command=/path/to/your/command autostart=true autorestart=true stderr_logfile=/var/log/myapp.err.log stdout_logfile=/var/log/myapp.out.log -
启动
supervisord:sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl start myapp
方法二:使用 systemd
如果你使用的是 systemd,可以创建一个服务单元文件来实现自动重启。
-
创建服务单元文件: 创建一个新的服务单元文件,例如
/etc/systemd/system/myapp.service:[Unit] Description=My Application After=network.target [Service] ExecStart=/path/to/your/command Restart=always RestartSec=5 User=your_username Group=your_groupname StandardOutput=syslog StandardError=syslog SyslogIdentifier=myapp [Install] WantedBy=multi-user.target -
重新加载 systemd 配置:
sudo systemctl daemon-reload -
启动服务:
sudo systemctl start myapp -
设置开机自启动:
sudo systemctl enable myapp
方法三:使用 cron 和 nohup
你可以使用 cron 定期检查进程是否运行,并在进程退出时使用 nohup 重新启动它。
-
编辑 crontab 文件:
crontab -e -
添加以下内容:
* * * * * pgrep -f /path/to/your/command || nohup /path/to/your/command &这个例子中,
pgrep -f /path/to/your/command用于检查进程是否运行,如果没有找到,则使用nohup启动它。
方法四:使用 while 循环
你可以在脚本中使用 while 循环来不断检查进程是否运行,并在进程退出时重新启动它。
#!/bin/bash
while true; do
nohup /path/to/your/command &
wait $!
echo "Process exited with code $?; restarting..."
sleep 5
done
将这个脚本保存为 run_myapp.sh,然后使用 nohup 或 systemd 启动它。
选择适合你需求的方法来实现自动重启功能。
以上就是关于“nohup命令如何实现自动重启”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm