Linux Bash脚本和Mongo

4
我有一个bash脚本来检查MongoDB数据库,如果满足某些条件,则发送电子邮件。
Mongo提供--eval选项以返回值。但是,不是像这样拥有以下内容:
ALERT=true|false 我有以下内容:
ALERT= MongoDB shell version: 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

有人可以帮我吗?我需要将JavaScript变量“alarm”分配给Bash变量ALARM。


1
在Bash / Ksh等中,用于将值分配给变量的命令行表单称为命令替换。执行ALERT = $(mongo ...)。但首先,只需获取mongo db --eval ...以返回您想要在命令行运行时查看的信息。如果您无法通过查看Mongo文档或在Google上搜索来解决问题,请发布单独的问题并附上MongoDB错误消息。祝你好运。 - shellter
2个回答

6

在命令行中添加开关--quiet,例如mongo --quiet --eval your-statement,以忽略您得到的字符串。


1

现在你设置alert为你想要执行的实际命令。如果你想要捕获你的mongo命令的输出,你应该使用:

alert=`mongo blah blah`

或者:

alert=$(mongo blah blah)

我更喜欢后一种形式,因为它更容易嵌套命令。
一旦你解决了这个问题,仍然可能会出现不必要的额外输出(如你的更新所确认的那样)。
直接从命令行运行mongo命令将给你你将收到的文本。然后,就是通过某些方式来处理输出,使你只看到想要的输出。
这可以通过将输出通过像grep -v(以删除不需要的内容)这样的东西进行管道传输来完成,或者找到一个mongo命令行选项,使其根本不会输出不需要的内容(例如使用--quiet)。有关详细信息,请参见此处

谢谢。我没有收到错误信息,但 ALERT 的值是“MongoDB shell version: 2.6.1”,它应该是 true 或 false。 - Marco C
如何在Mongo脚本中返回true或false? - Marco C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接