You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Linux设备上的Bash脚本持续运行并在崩溃后自动重启?

Linux下Bash脚本自动重启的实现方案

方法一:用Bash循环直接监控

这是最轻量化的方案,无需额外工具,适合快速部署。

写一个监控脚本(比如restart_my_script.sh),用while循环持续执行目标脚本,脚本崩溃后自动重启:

#!/bin/bash
while true; do
    # 运行目标脚本
    ./my_script.sh
    # 可选:记录重启日志
    echo "脚本已崩溃,$(date) 正在重启..." >> script_restart.log
    # 可选:避免频繁重启,等待2秒再重启
    sleep 2
done

使用方式

  1. 给监控脚本加执行权限:chmod +x restart_my_script.sh
  2. 后台运行监控脚本:nohup ./restart_my_script.sh &
    • nohup可让脚本在终端关闭后继续运行,输出默认写入nohup.out

方法二:用systemd系统服务(推荐生产环境)

systemd是现代Linux发行版的默认初始化系统,自带进程监控与自动重启能力,可靠性高。

步骤1:创建systemd服务文件

在/etc/systemd/system/目录下创建my_script.service文件,内容如下:

[Unit]
Description=持久运行的Bash脚本
After=network.target  # 脚本依赖网络时添加,否则可省略

[Service]
Type=simple
ExecStart=/绝对路径/到/你的/my_script.sh  # 替换为脚本实际绝对路径
Restart=always  # 无论脚本以何种方式终止,均自动重启
RestartSec=2  # 重启前等待2秒
User=你的用户名  # 可选,指定运行脚本的用户
StandardOutput=journal+console  # 日志输出到systemd日志和控制台
StandardError=journal+console

[Install]
WantedBy=multi-user.target  # 系统启动时自动加载服务

步骤2:启用并启动服务

# 重新加载systemd配置
sudo systemctl daemon-reload
# 设置开机自启
sudo systemctl enable my_script.service
# 启动服务
sudo systemctl start my_script.service

状态与日志查看

  • 查看服务状态:sudo systemctl status my_script.service
  • 实时跟踪日志:journalctl -u my_script.service -f

方法三:用supervisor进程管理工具

supervisor是专门的进程管理工具,适合同时管理多个需持续运行的进程。

步骤1:安装supervisor

  • Debian/Ubuntu:sudo apt-get install supervisor
  • RHEL/CentOS:sudo yum install supervisor

步骤2:创建配置文件

在/etc/supervisor/conf.d/目录下创建my_script.conf文件,内容如下:

[program:my_script]
command=/绝对路径/到/你的/my_script.sh  # 脚本绝对路径
autostart=true  # 启动supervisor时自动启动脚本
autorestart=true  # 脚本崩溃时自动重启
startretries=3  # 启动失败重试次数
user=你的用户名  # 指定运行脚本的用户
stdout_logfile=/var/log/my_script_out.log  # 标准输出日志路径
stderr_logfile=/var/log/my_script_err.log  # 错误输出日志路径

步骤3:更新配置并启动

# 更新supervisor配置
sudo supervisorctl reread
sudo supervisorctl update
# 启动脚本进程
sudo supervisorctl start my_script

常用命令

  • 查看进程状态:sudo supervisorctl status
  • 重启脚本:sudo supervisorctl restart my_script
  • 停止脚本:sudo supervisorctl stop my_script

内容的提问来源于stack exchange,提问作者Janzaib M Baloch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 06:45:27