【问题标题】:Direct mongo output to a file直接 mongo 输出到文件
【发布时间】:2016-09-15 21:01:14
【问题描述】:

我有一个脚本可以自动为我们的服务器重建 mongo db:

#!/bin/sh

mongo local:host 127.0.0.1 mongodb-create-ourdatabase.js > validate.txt

mongoimport --host 127.0.0.1 --db ourdatabase --collection ourUser --file create-ourUser.js > validate.txt

创建数据库时第一行的输出写入文件,但第二行的输出,其中创建了 ourUser 集合输出到屏幕。

我错过了什么?

【问题讨论】:

    标签: bash mongodb stdout


    【解决方案1】:

    首先,两个调用都会创建一个空的新 validate.txt 文件。所以第二次呼叫破坏了第一次呼叫结果。我怀疑这是您想要的,因此您应该将第二个 > 更改为 >>追加 到您的日志文件。

    其次,可执行文件通过 2 个屏幕通道发出输出:标准输出(又名stdout,用于正常输出、结果)和标准错误(又名stderr ,用于警告和错误)。通过查看输出无法知道哪个流是目标。

    要合并两个流并获取所有进程输出,您必须使用2&>1stderr 传送到stdout 以便能够重定向(dup & close pipe 2=stderr to 1=stdout)

    mongo local:host 127.0.0.1 mongodb-create-ourdatabase.js 2&>1 > validate.txt
    mongoimport --host 127.0.0.1 --db ourdatabase --collection ourUser --file create-ourUser.js 2&>1 >> validate.txt
    

    【讨论】:

      【解决方案2】:

      感谢 Jean-Francois 的回复,不幸的是,这没有用,但已经很接近了。有效的是:

      #!/bin/sh
      
      mongo localhost:27017 mongodb-create-our-database.js 2>&1 > validate.txt
      
      mongoimport --host 127.0.0.1 --db ourdatabase --collection ourUser --file create-ourUser.js >> validate.txt 2>&1
      

      Using 2&>1 让脚本查找文件 2,我发现了这个很好的解释:

      Scroll down to 1st answer

      这对我有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-06-25
        • 2023-03-26
        • 1970-01-01
        • 2014-04-29
        • 1970-01-01
        • 2012-05-15
        • 2019-10-11
        相关资源
        最近更新 更多