简体   繁体   中英

Linux Bash Script And Mongo

I have a bash script to check a MongoDB database and send an email if certain conditions are met.

Mongo give you the --eval option to return a value. But instead to have something like:

ALERT=true|false

I have:

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

Can someone help me? What I need is to assign the js variable 'alarm' to the bash variable ALARM

将switch --quiet添加到命令行,例如mongo --quiet --eval your-statement ,忽略你得到的字符串。

As you have it now, you're setting alert to the actual command you want to execute. If you want to capture the output of your mongo command, you should use:

alert=`mongo blah blah`

or:

alert=$(mongo blah blah)

I prefer the latter form since it's easier to nest commands.

Once you've fixed that, it may still be the case that you're getting undesirable extra output from the command (as confirmed by your update).

Running your mongo command directly from the command line will give you the text you'll receive. It's then a matter of massaging that output so that the only output you see is what you want.

This can be done by piping the output through something like grep -v (to remove the unwanted stuff), or finding a command line option to mongo which will cause it not to output the unwanted stuff at all (such as using --quiet ). See here for more details.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM