【问题标题】:Query mongodb from command line and send the result as HTTP request in crontab从命令行查询 mongodb 并在 crontab 中将结果作为 HTTP 请求发送
【发布时间】:2014-06-25 02:36:01
【问题描述】:

我想在我的应用程序中加入一个简单的监控,所以我需要发送一个 HTTP 请求,其中包含来自 crontab 的 mongodb 集合中的文档数。

请求在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...?

【问题讨论】:

    标签: bash mongodb monitoring crontab


    【解决方案1】:

    并不是要贬低维克多及时给出的答案,但“单线”形式是:

     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() 所需的“键/值”对,并在 countersrv 的“编辑端点”处通过管道传输到 curl,这是默认的查看页面。 @- 结构采用标准输入。

    【讨论】:

    • @VictorH.Panisa 你真的是第一个。我只是为后代添加了这个。对不起,我总是那样说话。 “万一有人真的想要单线”。无论如何,我之前都对你投了赞成票。
    • 不需要抱歉^^感谢您补充答案。我也给你投票了=]
    【解决方案2】:

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

    然后,您可以在 /etc/cron.hourly 中创建一个 monitor.sh。您可以设置此脚本的执行权限

    chmod +x /etc/cron.hourly/monitor.sh
    

    他们,你做一个js代码来检索数据,例如mongoscript.js:

    use yourdb
    db.my_docs.count()
    

    你最终的 monitor.sh 可能是这样的

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

    【讨论】:

    • 感谢您的回答。您能否让我知道管道应该如何为 CURL 设置 POST 参数的值? curl是否解析-d参数,如果检测到不完整的数据然后从stdin读取它?
    • 你可以使用 .js 文件来设置一个 mongo 脚本,然后运行 ​​mongo script.js ,关于管道我很确定它缺少一些东西,但我没有 Linux 可以告诉你此刻
    • 我认为管道是-d @-
    • 感谢@NeilLunn 的确认,我在几秒钟前用谷歌搜索过,似乎是正确的
    猜你喜欢
    • 2013-01-07
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-05
    • 1970-01-01
    • 2016-08-06
    相关资源
    最近更新 更多