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

19次阅读

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

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

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

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

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

步骤:

  • 写一个重启脚本,例如 /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

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

Android 服务 Service_详解 WORD 版

本文档主要讲述的是 Android 服务 Service_详解;服务(Service)是 Android 系统中 4 个应用程序组件之一(其他的组件详见 3.2 节的内容)。服务主要用于两个目的:后台运行和跨进程访问。通过启动一个服务,可以在不显示界面的前提下在后台运行指定的任务,这样可以不影响用户做其他事情。通过 AIDL 服务可以实现不同进程之间的通信,这也是服务的重要用途之一。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看

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

查看详情 Linux 写一个自动重启服务的脚本

#!/bin/bash SERVICE_NAME="myapp" CHECK_PORT=8080 <p>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 <p>[Service] Type=simple User=root ExecStart=/opt/scripts/watch-myapp.sh Restart=always RestartSec=10</p><p>[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 权限跑即可

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

星耀云
版权声明:本站原创文章,由 星耀云 2025-12-05发表,共计1895字。
转载说明:转载本网站任何内容,请按照转载方式正确书写本站原文地址。本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。
text=ZqhQzanResources