Reputation: 3213
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
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
Reputation: 4421
add switch --quiet
to command line, something like mongo --quiet --eval your-statement
to ignore the string you got.
Upvotes: 6