我想在我的应用程序中加入一个简单的监视器,因此我需要从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...?
答案 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。