这是我用来检查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正在运行"。我究竟做错了什么 ?请帮忙。感谢
答案 0 :(得分:1)
的Vinay,
有几件事:
1 - 您想检查MongoDB是否正在运行,或者您想检查它是否响应查询?
您当前的设计仅会告知是否存在名称中包含单词" mongo"运行。 我会设计一个"金丝雀查询"您可以使用mongo shell运行并使用结果来确定MongoDB是否正在运行。因此,在极少数情况下,MongoDB守护程序可能正在运行但没有响应,您可能会收到警报。
2 - 您的流程正在检查单词" mongo",mongoDB数据库的可执行文件是" mongod"。
您的脚本被称为" checkmongo"。每次脚本运行时都会出现一个" checkmongo"进程运行和if条件将始终为true。该脚本正在检测自身而不是mongod进程。
将搜索条件更改为mongod
如果pgrep mongod>的/ dev / null的
答案 1 :(得分:0)
#!/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