Marco C
Marco C

Reputation: 3213

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" [email protected]  < /root/watchdog/email
 fi

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

Upvotes: 4

Views: 1447

Answers (2)

paxdiablo
paxdiablo

Reputation: 881413

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.

Upvotes: 1

Wizard
Wizard

Reputation: 4421

add switch --quiet to command line, something like mongo --quiet --eval your-statement to ignore the string you got.

Upvotes: 6

Related Questions