我有一个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
答案 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。