2016-03-28 88 views
0

下面是我用来检查MongoDB状态的shell脚本。 checkmongo.sh每两分钟通过一次cron作业。如何检查MongoDB是否从shell脚本运行?

#!/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的运行”。我究竟做错了什么 ?请帮忙。由于

+0

检查MongoDB的日志,看看那里有什么。可能它可能因某种原因而终止。 – Saleem

+0

@Saleem问题是如果我从终端运行shell脚本一切正常。只有当我通过cron工作完成时才会出现问题。 – Vinay

回答

0

维奈,

几件事情:

1 - 你想检查是否MongoDB是运行还是要检查它是否响应查询?

您当前的设计只会告诉您是否有一个名称中包含单词“mongo”的进程正在运行。 我会设计一个“canary query”,你可以使用mongo shell运行并使用结​​果来确定MongoDB是否正在运行。因此,在极少数情况下,MongoDB守护进程可能正在运行但不能响应,您可能会收到警报。

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

您的脚本被称为“checkmongo”。每次脚本运行时都会有一个“checkmongo”进程正在运行,并且if条件将始终为真。该脚本正在检测自己而不是mongod进程。

改变你的搜索条件,以mongod的

如果p纤ep的mongod>的/ dev/null的

+0

是的,我想知道MongoDB是否在运行。而且,如果它已经停止,我想自动启动它。 我确定没有其他进程在其名称中包含“mongo”这个词。 – Vinay

+0

Vinay根据你的问题你脚本的名字包含mongo这个词。你的脚本叫做“checkmongo.sh”吗?检查“mongod”在你的条件是否会解决问题 – BigDataKid

+0

谢谢。有效。 – Vinay