本文适配所有主流Linux发行版(CentOS7+/Debian9+/Ubuntu16.04+),三种方案任选其一即可,修改对应参数就能直接落地,无额外学习成本。
当前主流Linux发行版默认自带systemd,不需要额外安装,执行以下命令确认即可:
``` systemd --version ```
输出版本号即代表正常可用。
systemd服务配置文件固定存放在/etc/systemd/system/目录,命名规则为你的程序名.service,以下是完整可复制的配置模板,替换注释标注的内容即可:
``` [Unit] Description=Custom App Service 服务描述,可自定义修改 After=network.target 等待网络启动后再启动程序,绝大多数程序需要该配置 [Service] Type=simple User=root 修改为运行程序的用户,比如www-data WorkingDirectory=/root/ 修改为你的程序工作目录,必须写绝对路径 ExecStart=/usr/local/bin/myapp --port 8080 修改为你的完整启动命令,必须写绝对路径 Restart=always 核心保活配置:程序任何异常退出都自动重启 RestartSec=3 退出后间隔3秒再重启,避免频繁占用资源 RestartPreventExitStatus=0 可选配置:正常退出(exit code 0)不重启,不需要可删除该行 [Install] WantedBy=multi-user.target ```
依次执行以下命令,直接复制运行即可,注意把命令中的myapp替换成你自己的服务名:
``` 重载systemd配置,让新建的服务生效 systemctl daemon-reload 启动保活服务 systemctl start myapp 设置开机自动启动,服务器重启后程序自动恢复 systemctl enable myapp ```
执行systemctl status myapp,输出显示active (running)即配置完成,后续程序崩溃、异常退出都会被自动拉起。
根据你的发行版直接复制对应安装命令:
Debian/Ubuntu 系列:
``` apt update && apt install -y supervisor ```
CentOS/RHEL 系列:

``` yum install -y supervisor && systemctl enable --now supervisord ```
Supervisor的程序配置存放在/etc/supervisor/conf.d/目录,命名为你的程序名.conf,完整可复制模板如下:
``` [program:myapp] ; 修改为你的程序名 command=/usr/local/bin/myapp --port 8080 ; 完整启动命令,必须写绝对路径 directory=/root/ ; 修改为你的程序工作目录 user=root ; 修改为运行程序的用户 autostart=true ; 开机自动启动 autorestart=true ; 核心保活配置:异常退出自动重启 startretries=3 ; 启动失败最多重试3次 exitcodes=0 ; 正常退出(exit code 0)不重启 ```
依次执行以下命令,替换myapp为你的程序名即可:
``` 重载配置加载新的程序规则 supervisorctl update 启动目标程序 supervisorctl start myapp ```
执行supervisorctl status,输出显示RUNNING即配置完成。
适合不想引入第三方服务的场景,通过系统自带的定时任务每分钟检测一次程序状态,异常就自动拉起。
新建检测脚本文件/root/check_myapp.sh,填入以下内容,替换对应参数即可:
``` !/bin/bash 替换为你的程序名,需要和启动命令中的进程名一致 PROCESS_NAME="myapp" 替换为你的完整启动命令,结尾加&让程序后台运行 START_CMD="/usr/local/bin/myapp --port 8080 &" 检测进程是否存在,不存在则启动 pgrep -x "$PROCESS_NAME" > /dev/null if [ $? -ne 0 ]; then $START_CMD fi ```
执行以下命令给脚本添加运行权限:
``` chmod +x /root/check_myapp.sh ```
执行以下命令打开crontab编辑器:
``` crontab -e ```
第一次打开会提示选择编辑器,直接输入1选择nano即可,在文件的最后一行添加以下内容:
``` /bin/bash /root/check_myapp.sh ```
保存退出步骤:nano编辑器按Ctrl+O回车确认,再按Ctrl+X退出;vi编辑器按ESC后输入:wq回车即可。配置完成后每分钟会自动检测,程序异常退出后最多1分钟就会被自动拉起。
journalctl -u 你的服务名 -f即可实时查看程序的输出日志。/var/log/supervisor/你的程序名-stdout.log,直接查看即可定位问题。三种方案中systemd不需要安装额外软件,资源占用最低,功能满足绝大多数保活需求,推荐优先选择使用,所有配置均可直接复制修改,不需要额外调整参数。












易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。
Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图