Linux Bash脚本和Mongo

时间:2014-08-20 03:29:59

标签: linux bash mongodb shell

我有一个bash脚本来检查MongoDB数据库并在满足某些条件时发送电子邮件。

Mongo为您提供--eval选项以返回值。但是要改为:

ALERT =真|假

我有:

ALERT = MongoDB shell版本:2.6.1

 #!/bin/bash
 echo "WatchDog Jerry"

 ALERT=$(mongo ob --eval 'var now = new Date().getTime(), alert = false; db.sess.find().forEach(function(sess){ var delay = 1 * 60 * 1000; var ts = sess.ts.toNumber(); if((now - ts) > delay) alert = true;});  print(alert);')

 echo "alert: $ALERT"

 if [ "$ALERT" == "true" ]; then
     mail -s "ALARM - WatchDog Jerry" marco@test.com  < /root/watchdog/email
 fi

有人能帮助我吗? 我需要的是将js变量'alarm'分配给bash变量ALARM

2 个答案:

答案 0 :(得分:6)

将switch --quiet添加到命令行,类似mongo --quiet --eval your-statement以忽略您获得的字符串。

答案 1 :(得分:1)

正如您现在所做的那样,您将alert设置为您要执行的实际命令。如果要捕获mongo命令的输出,则应使用:

alert=`mongo blah blah`

或:

alert=$(mongo blah blah)

我更喜欢后一种形式,因为它更容易嵌套命令。

一旦你修复了这个问题,你可能仍然会从命令中获得不受欢迎的额外输出(由更新确认)。

直接从命令行运行mongo命令将为您提供您将收到的文本。然后就是按摩那个输出的问题,这样你看到的唯一输出就是你想要的。

这可以通过管道输出来完成,例如grep -v(删除不需要的东西),或找到mongo的命令行选项,这将导致它不输出不需要的东西全部(例如使用--quiet)。有关详细信息,请参阅here