Linux 写一个自动重启服务的脚本

发布时间 - 2025-12-05 00:00:00    点击率:
Linux自动重启服务有两个稳妥方案:一是用cron定时执行systemctl重启脚本,适用于周期性维护;二是用systemd托管的守护脚本定期检测端口或服务状态,异常时自动重启,适用于高可用场景。

Linux 上自动重启服务,核心是用 systemctl 控制服务状态,并配合定时任务(cron)或条件检测逻辑实现“自动”。下面提供两个常用、稳妥的方案:一个是简单可靠的定时重启(适合周期性维护),另一个是按需检测+重启(适合服务意*掉的场景)。

方案一:用 cron 定时重启服务(推荐用于计划性维护)

适用于希望每天/每周固定时间重启某服务(比如 nginx、redis、docker 等),避免内存泄漏或连接堆积。

步骤:

  • 写一个重启脚本,例如 /opt/scripts/restart-nginx.sh
#!/bin/bash
# 检查服务是否运行,再执行重启(更安全)
if systemctl is-active --quiet nginx; then
    systemctl restart nginx
    echo "$(date): nginx restarted successfully" >> /var/log/nginx-restart.log
else
    echo "$(date): nginx was not running, starting instead" >> /var/log/nginx-restart.log
    systemctl start nginx
fi
  • 赋予执行权限:chmod +x /opt/scripts/restart-nginx.sh
  • 添加到 crontab(如每天凌晨 4:30 执行):
    crontab -e,加入一行:
30 4 * * * /opt/scripts/restart-nginx.sh

方案二:后台守护式检测并重启(适合关键服务高可用)

适用于不能容忍长时间中断的服务(如数据库、API 后端)。脚本常驻运行,定期检查进程或端口,异常则拉起。

示例:检测 8080 端口是否响应,不响应就重启 myapp.service

#!/bin/bash
SERVICE_NAME="myapp"
CHECK_PORT=8080

while true; do if ! nc -z 127.0.0.1 $CHECK_PORT 2>/dev/null; then echo "$(date): Port $CHECK_PORT down, restarting $SERVICE_NAME..." systemctl restart $SERVICE_NAME sleep 5 # 避免重启过快失败 fi sleep 30 # 每30秒检查一次 done

使用建议:

  • 保存为 /opt/scripts/watch-myapp.sh,加执行权限
  • 用 systemd 管理该监控脚本(比直接放后台更可靠):
    新建 /etc/systemd/system/watch-myapp.service
[Unit]
Description=Watch and restart myapp service
After=network.target

[Service] Type=simple User=root ExecStart=/opt/scripts/watch-myapp.sh Restart=always RestartSec=10

[Install] WantedBy=multi-user.target

  • 启用并启动:systemctl daemon-reload && systemctl enable --now watch-myapp.service

注意事项

避免踩坑的关键点:

  • 脚本中尽量用 systemctl is-active --quietnc/curl 做真实状态判断,别只靠 ps | grep
  • 重启前加日志,方便排查误触发
  • 如果是生产环境,重启前可加锁或健康检查(比如调用服务自身健康接口)
  • 不要在 root 的 crontab 里用 sudo systemctl,直接用 root 权限跑即可

基本上就这些。选方案一还是二,取决于你想要“按时重启”还是“出问题才动”。两者都轻量、可审计、易维护。


# linux  # redis  # docker  # nginx  # app  # 端口  # 后端  # curl  # 自动重启  # red 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何使用.env文件管理环境变量?(最佳实践)  ,网页ppt怎么弄成自己的ppt?  Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】  Claude怎样写结构化提示词_Claude结构化提示词写法【教程】  如何快速生成ASP一键建站模板并优化安全性?  php结合redis实现高并发下的抢购、秒杀功能的实例  北京企业网站设计制作公司,北京铁路集团官方网站?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  如何在建站之星网店版论坛获取技术支持?  Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)  如何快速生成专业多端适配建站电话?  如何快速使用云服务器搭建个人网站?  Python3.6正式版新特性预览  实例解析Array和String方法  音响网站制作视频教程,隆霸音响官方网站?  Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧  微信小程序 HTTPS报错整理常见问题及解决方案  javascript中的try catch异常捕获机制用法分析  实例解析angularjs的filter过滤器  JS去除重复并统计数量的实现方法  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  iOS发送验证码倒计时应用  Laravel怎么上传文件_Laravel图片上传及存储配置  如何正确下载安装西数主机建站助手?  Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比  iOS UIView常见属性方法小结  Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  Laravel如何使用Vite进行前端资源打包?(配置示例)  Laravel中的withCount方法怎么高效统计关联模型数量  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】  如何在腾讯云服务器快速搭建个人网站?  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  HTML 中动态设置元素 name 属性的正确语法详解  如何在搬瓦工VPS快速搭建网站?  Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门  如何快速搭建支持数据库操作的智能建站平台?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  开心动漫网站制作软件下载,十分开心动画为何停播?  微信小程序 闭包写法详细介绍  百度浏览器网页无法复制文字怎么办 百度浏览器复制修复  Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能  动图在线制作网站有哪些,滑动动图图集怎么做?  如何在建站宝盒中设置产品搜索功能?  详解Huffman编码算法之Java实现  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  专业商城网站制作公司有哪些,pi商城官网是哪个?  HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】  Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)