2016-03-28 215 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