OpenWrt系统下进程监测和守护脚本
例如在OpenWrt系统下监测Docker服务并在进程结束时自动启动Docker,可以创建一个脚本来完成这个任务,实现试试监测系统,发现进程挂掉就自动启动(如果给Docker的进程名称和启动命令改成你自己的程序,就可以实现任意程序的进程守护)。
XML/HTML代码
- #!/bin/sh
- # 检测Docker服务进程的状态
- check_docker_status() {
- local docker_pid
- docker_pid=$(ps | grep -v grep | grep docker | awk '{print $1}')
- if [ -n "$docker_pid" ]; then
- echo "Docker服务正在运行 (PID: $docker_pid)"
- return 0
- else
- echo "Docker服务未运行"
- return 1
- fi
- }
- # 启动Docker服务
- start_docker() {
- echo "启动Docker服务..."
- /etc/init.d/docker start
- }
- # 监测Docker服务状态并自动启动
- while true; do
- if check_docker_status; then
- sleep 5 # 每5秒检测一次
- else
- start_docker
- sleep 1 # 等待1秒后重新检测状态
- fi
- done
接下来,你可以使用 nohup 命令在后台运行该脚本,并将输出重定向到日志文件:
XML/HTML代码
- nohup /root/docker_monitor.sh > /root/docker_monitor.log &
这将启动脚本并将输出保存到 /root/docker_monitor.log 文件中。你可以根据实际情况更改日志文件的路径和名称。
可以将上面命令写到OpenWrt的启动项里面,开机自动启动,脚本将会监测Docker服务的状态,如果服务停止运行,它将自动启动Docker服务。随你这么折腾Docker服务总是可以自动启动,稳定得很。
在Alpine Linux系统下,编写一个Shell脚本来监测Docker服务并在进程结束时自动启动它。下面是一个简单的示例脚本,假设保存为monitor_docker.sh:
XML/HTML代码
- #!/bin/sh
- # 设置要监测的Docker服务名称
- DOCKER_SERVICE_NAME="docker"
- # 持续监测Docker服务
- while true; do
- # 检查Docker服务进程是否在运行
- if ! pgrep -x "$DOCKER_SERVICE_NAME" > /dev/null; then
- echo "Docker服务未运行,正在尝试启动..."
- # 启动Docker服务
- rc-service "$DOCKER_SERVICE_NAME" start
- fi
- # 等待一段时间再次检查
- sleep 5
- done
请注意,脚本中使用了rc-service命令来启动Docker服务。在Alpine Linux系统上,使用rc-service命令来管理服务是常见的做法。如果系统上有其他方法来启动Docker服务,请相应地修改脚本。
确保在保存脚本后赋予它执行权限:
chmod +x monitor_docker.sh
然后,运行脚本来开始监测Docker服务:
./monitor_docker.sh
这样,脚本将会在后台持续运行,并在检测到Docker服务进程结束时自动重新启动它。请注意,这只是一个简单的示例,如果需要更复杂的监测和处理逻辑,可以根据自己的需求进行修改。同时,也可以将脚本添加到系统启动中,以确保在系统重启后自动运行监测脚本。
在Debian系统下写一个自动监测Docker的脚本并实现Docker进程挂掉自动重启的过程,可以使用以下步骤:
创建脚本文件:首先打开一个文本编辑器,创建一个名为docker_monitor.sh的脚本文件。
编写脚本内容:将以下内容复制到docker_monitor.sh脚本中。
XML/HTML代码
- #!/bin/bash
- # 检查Docker进程是否运行
- check_docker_process() {
- docker_process_count=$(ps -ef | grep -v grep | grep -c "dockerd")
- if [ "$docker_process_count" -eq 0 ]; then
- return 1
- else
- return 0
- fi
- }
- # 启动Docker
- start_docker() {
- service docker start
- }
- # 主循环
- while true; do
- if check_docker_process; then
- echo "Docker is running."
- else
- echo "Docker is not running. Starting Docker..."
- start_docker
- fi
- sleep 5 # 你可以根据需要调整检测的时间间隔
- done
添加执行权限:在终端中执行以下命令,为脚本文件添加执行权限。
chmod +x docker_monitor.sh
运行脚本:执行以下命令来运行脚本。
./docker_monitor.sh
现在,该脚本将自动监测Docker进程是否在运行,并在Docker进程挂掉时自动启动Docker。你可以根据需要调整脚本中的时间间隔和其他配置。注意:为了让脚本一直在后台运行,你可能需要将脚本添加到启动项或者使用工具如screen或nohup来运行它。它将在每次系统启动时自动运行,并在检测到Docker进程结束时自动启动Docker。请注意,此脚本中设置的检测间隔为5秒,可以根据需要进行调整。
注意:以上脚本Openwrt已经经过测试,其他系统的需要自测,不保证可以正常使用。