Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
LinuxBash脚本和Mongo_Linux_Bash_Mongodb_Shell - Fatal编程技术网

LinuxBash脚本和Mongo

LinuxBash脚本和Mongo,linux,bash,mongodb,shell,Linux,Bash,Mongodb,Shell,我有一个bash脚本来检查MongoDB数据库,并在满足某些条件时发送电子邮件 Mongo为您提供了返回值的选项。而是要有这样的东西: 警报=真|假 我有: ALERT=MongoDB外壳版本: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)

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

Mongo为您提供了返回值的选项。而是要有这样的东西:

警报=真|假

我有:

ALERT=MongoDB外壳版本: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
#/bin/bash
回声“看门狗杰瑞”
ALERT=$(mongo ob--eval'var now=new Date().getTime(),ALERT=false;db.sess.find().forEach(函数(sess){var delay=1*60*1000;var ts=sess.ts.toNumber();if((now-ts)>delay)ALERT=true;});print(ALERT);')
回显“警报:$alert”
如果[“$ALERT”==“true”];然后
邮件-s“警报-监视者杰瑞”marco@test.com
有人能帮我吗?
我需要的是将js变量'alarm'分配给bash变量alarm

现在,您正在将
警报设置为要执行的实际命令。如果要捕获
mongo
命令的输出,应使用:

alert=`mongo blah blah`
或:

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

一旦您修复了这个问题,您可能仍然会从命令中获得不需要的额外输出(正如您的更新所确认的)

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


这可以通过管道将输出通过
grep-v
(删除不需要的内容),或者找到
mongo
的命令行选项,这将导致它根本不输出不需要的内容(例如使用
--quiet
)。有关更多详细信息,请参阅。

将开关
--quiet
添加到命令行,类似于
mongo--quiet--eval语句
以忽略得到的字符串。

在bash/ksh/etc中从cmd分配给变量的形式称为命令替换。Do
警报=$(mongo…
。但首先,只需获取
mongodb--eval…
即可返回从cmd行运行时希望看到的信息。如果你无法通过查看MongoDoc或谷歌搜索找到答案,请使用mongoDB错误msgs发布单独的问题。祝你好运,谢谢。我没有收到错误,但警报的值为“MongoDB shell version:2.6.1”,假设为true或false。如何从mongo脚本返回true或false?
alert=$(mongo blah blah)