如何从 shell 脚本中检查 MongoDB 是否为 运行?

How to check whether MongoDB is running from a shell script?

这是我用来检查 MongoDB 状态的 shell 脚本。 checkmongo.sh 每两分钟通过一次 cron 作业。

#!/bin/bash

echo "shell script called"
if pgrep mongo > /dev/null
then
    echo "MongoDB Running"
else
    echo "Stopped .. starting MongoDB"
        sudo service mongodb start
fi

Cron 作业如下:

*/2 * * * * /etc/init.d/checkmongo.sh> /etc/init.d/cronjob.log 2>&1

无论 MongoDb 是否为 运行,cronjob.log 的内容始终为 "MongoDB Running"。我究竟做错了什么 ?请帮忙。谢谢

维奈,

几件事:

1 -- 您是要检查 MongoDB 是否 运行ning 还是要检查它是否正在响应查询?

您当前的设计只会判断是否存在名称中包含单词 "mongo" 运行ning 的进程。 我会设计一个 "canary query" ,你可以 运行 与 mongo shell 并使用结果来确定 MongoDB 是否是 运行ning .因此,在极少数情况下,MongoDB 守护程序可能 运行ning 但没有响应,您可能会收到警报。

2 --您的进程正在检查单词 "mongo",mongoDB 数据库的可执行文件是 "mongod"。

您的脚本名为 "checkmongo"。每次编写 运行s 脚本时,都会有一个 "checkmongo" 进程 运行ning 并且 if 条件将始终为真。该脚本正在检测自身而不是 mongod 进程。

将您的搜索条件更改为 mongod

if pgrep mongod > /dev/null

#!/bin/bash

mongod_status=`service mongod status`
echo "${mongod_status}"

if [[ "${mongod_status}" == *"start/running"* ]]
then
    echo "MongoDB is already running."
else
    sudo service mongod start
    echo "Start MongoDB."
fi