从命令行查询mongodb并将结果作为HTTP请求发送到crontab中

时间:2014-06-25 02:36:01

标签: bash mongodb monitoring crontab

我想在我的应用程序中加入一个简单的监视器,因此我需要从crontab发送一个包含mongodb集合中文档数量的HTTP请求。

请求在页面http://countersrv.com/中描述如下:

curl http://countersrv.com/ID -d value=1

我需要从命令行查询mongodb并获取集合中的文档数量。它应该是db.my_docs.count()

我想每小时发送一个这个号码,所以需要在crontab中添加这样的内容:

0 * * * * curl http://countersrv.com/ID -d value=...query mongo here...?

2 个答案:

答案 0 :(得分:7)

避免直接在crontab上使用命令,你可能有一个目录/etc/cron.hourly,crontab已经调用以确定的间隔,每小时,每天运行特定文件夹中的所有脚本,例如

然后,在/etc/cron.hourly中你可以创建一个monitor.sh,用

设置这个脚本的执行权限
chmod +x /etc/cron.hourly/monitor.sh

使用必要的代码创建一个脚本来检索数据,例如,mongoscript.js:

use yourdb
db.my_docs.count()

脚本可能类似于

#!/bin/bash
mongo mongoscript.js > output.js
curl http://countersrv.com/ID -d value=@output.js

答案 1 :(得分:7)

并不意味着减损Victor给出的及时答案,而是"一个班轮"形式如下:

 mongo --quiet --eval 'var db = db.getSiblingDB("database"); print( "value=" + db.collection.count() );' | curl -X POST http://countersrv.com/[edit endpoint] -d @-

--quiet会抑制shell上的启动消息,--eval会阻止命令在命令行上传递。

要选择数据库,请使用.getSiblingDB()作为交互式shell use database的方法助手,使用"数据库"你想要的名字。在这之后要么只是"集合"名称或.getCollection()方法可与基本功能一起使用。

只需print()"键/值"需要配对并在"编辑端点"管道到curl。对于counterrv,这是默认的查看页面。 @-构造需要stdin。