<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/ DTD/wml_1.1.xml">

<wml>
<head>
<meta http-equiv="cache-control" content="max-age=180,private" />
</head>
<card title="OpenWrt系统下进程监测和守护脚本">
<p>
作者:<a href="index.php?action=showuser&amp;userid=1&amp;hash=">admin</a><br />时间:2023-07-11 09:11<br />分类:<a href="index.php?action=list&amp;cid=3&amp;hash=">电脑技术</a><br />内容:
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 &quot;$docker_pid&quot; ]; then

        echo &quot;Docker服务正在运行 (PID: $docker_pid)&quot;

        return 0

      else

        echo &quot;Docker服务未运行&quot;

        return 1

      fi

    }

     

    # 启动Docker服务

    start_docker() {

      echo &quot;启动Docker服务...&quot;

      /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




将上述脚本保存为 docker_monitor.sh 文件，并通过 chmod +x docker_monitor.sh 命令赋予执行权限。然后，你可以将该脚本放置在适当的位置，例如 /root/docker_monitor.sh。


接下来，你可以使用 nohup 命令在后台运行该脚本，并将输出重定向到日志文件：




XML/HTML代码


    nohup /root/docker_monitor.sh &gt; /root/docker_monitor.log &amp;





这将启动脚本并将输出保存到 /root/docker_monitor.log 文件中。你可以根据实际情况更改日志文件的路径和名称。


可以将上面命令写到OpenWrt的启动项里面，开机自动启动，脚本将会监测Docker服务的状态，如果服务停止运行，它将自动启动Docker服务。随你这么折腾Docker服务总是可以自动启动，稳定得很。




 


在Alpine Linux系统下，编写一个Shell脚本来监测Docker服务并在进程结束时自动启动它。下面是一个简单的示例脚本，假设保存为monitor_docker.sh：




XML/HTML代码


    #!/bin/sh

     

    # 设置要监测的Docker服务名称

    DOCKER_SERVICE_NAME=&quot;docker&quot;

     

    # 持续监测Docker服务

    while true; do

      # 检查Docker服务进程是否在运行

      if ! pgrep -x &quot;$DOCKER_SERVICE_NAME&quot; &gt; /dev/null; then

        echo &quot;Docker服务未运行，正在尝试启动...&quot;

        # 启动Docker服务

        rc-service &quot;$DOCKER_SERVICE_NAME&quot; 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 &quot;dockerd&quot;)

        if [ &quot;$docker_process_count&quot; -eq 0 ]; then

            return 1

        else

            return 0

        fi

    }

     

    # 启动Docker

    start_docker() {

        service docker start

    }

     

    # 主循环

    while true; do

        if check_docker_process; then

            echo &quot;Docker is running.&quot;

        else

            echo &quot;Docker is not running. Starting Docker...&quot;

            start_docker

        fi

        sleep 5  # 你可以根据需要调整检测的时间间隔

    done





添加执行权限：在终端中执行以下命令，为脚本文件添加执行权限。


chmod +x docker_monitor.sh


运行脚本：执行以下命令来运行脚本。


./docker_monitor.sh


现在，该脚本将自动监测Docker进程是否在运行，并在Docker进程挂掉时自动启动Docker。你可以根据需要调整脚本中的时间间隔和其他配置。注意：为了让脚本一直在后台运行，你可能需要将脚本添加到启动项或者使用工具如screen或nohup来运行它。它将在每次系统启动时自动运行，并在检测到Docker进程结束时自动启动Docker。请注意，此脚本中设置的检测间隔为5秒，可以根据需要进行调整。




注意：以上脚本Openwrt已经经过测试，其他系统的需要自测，不保证可以正常使用。


</p><p>
<a href="index.php?action=login&amp;hash=">立即登陆发表评论</a><br />
</p>
<p><a href="index.php?action=list&amp;hash=">返回日志列表</a><br /><a href="index.php?action=index&amp;hash=">返回主页</a></p>
</card>
</wml>
