检查服务器 1 的状态,如果不可用,则运行脚本?

检查服务器 1 的状态,如果不可用,则运行脚本?

我有 2 台服务器:1 台主服务器和 1 台从服务器,并且有一个脚本每 1 分钟在从服务器上运行一次以检查主服务器的可用性。

它应该一直运行:

* * * * * /data/BackupServer/StatusCheck.bash  >> /data/BackupServer/Output.log 2>&1

后台:Master负责使用crontab在后台运行脚本。

我想要的是:

  1. 如果主服务器不可用,那么从服务器应该将这些职责添加到其 crontab 中以接管主服务器。
  2. 如果主服务器再次可用,则从服务器应该rm这些 crontab 配置并将其职责再次移交给主服务器(如果有)。

我拥有的是:

#!/bin/bash
check=$(curl -s -w "%{http_code}\n" -L "master" -o /dev/null)
if [[ $check == 200 || $check == 403 ]]
then
    # Service is online
    echo "Service is online, slave is handing over the tasks to master if any"
    exit 0
else
    # Service is offline or not working correctly
    echo "Service is offline or not working correctly, slave is taking over master now"
    exit 1
fi

我需要的是:

当服务器不可用时,从服务器应该手动启动主服务器 crontab 中正在运行的一些脚本。但是,这里我没有将它们添加到 crontab 中,而是要求脚本仅在服务器不可用时运行。

有人能建议我如何在 bash 中自动完成这个过程吗?我没有要求别人为我编写完整的代码,因为我不熟悉这些概念,需要一些帮助。

例如我可以做以下事情吗?

       #!/bin/bash
check=$(curl -s -w "%{http_code}\n" -L "master" -o /dev/null)
if [[ $check == 200 || $check == 403 ]]
then
    # Service is online
    echo "Service is online, slave is handing over the tasks to master if any"
    exit 0
else
    # Service is offline or not working correctly
    echo "Service is offline or not working correctly, slave is taking over master now"
    /manoj/scripts/location.plx > /manoj/logs/location/sync.log 2>&1
    /manoj/scripts/report.py > /manoj/logs/dashboard/dashboard.log 2>&1
    /etc/profile; /manoj/scripts/Space.py > /manoj/logs/dashboard/Consumption.log 2>&1
    exit 1
fi

答案1

不要做crontab操纵。

在主服务器和从服务器上运行脚本。在从服务器上,使用以下命令启动每个脚本:

check=$(curl -s -w "%{http_code}\n" -L "master" -o /dev/null)
if [[ $check == 200 || $check == 403 ]]
then
#   master not available; do stuff
else
#   master is available, do nothing
    exit 0
fi

如果主服务器可用,则从服务器上的脚本将在测试后退出。

答案2

我希望两台机器上运行相同的脚本以减少维护。假设/etc/hosts主服务器上的文件包含名称“master”,则两台机器可以有相同的脚本,如下所示:

#!/bin/bash

function DoJobs () {
    /manoj/scripts/location.plx > /manoj/logs/location/sync.log 2>&1
    /manoj/scripts/report.py > /manoj/logs/dashboard/dashboard.log 2>&1
    /etc/profile; /manoj/scripts/Space.py > /manoj/logs/dashboard/Consumption.log 2>&1
}

# If master server run jobs and exit
if grep -q "Master" /etc/hosts ; then
    DoJobs
    exit 0
fi

# Not the master server so do jobs if it is down
check=$(curl -s -w "%{http_code}\n" -L "master" -o /dev/null)
if [[ $check == 200 || $check == 403 ]]
then
    # Service is online
    echo "Service is online, slave is handing over the tasks to master if any"
    exit 0
else
    # Service is offline or not working correctly
    echo "Service is offline or not working correctly, slave is taking over master now"
   DoJobs
   exit 1
fi

现在两个服务器只需维护一个脚本。设置新作业时,只需编辑一个文件。

相关内容