我运行一个shell脚本但是没有将输出输出到我的文件,只有日期回显到.log文件的第一行。谁能解释为什么mongodump命令没有附加到.log文件?
#!/bin/sh
DEST=/db_backups/
DAYOFWEEK=`date +%u`
echo "---------------------- $(date) -----------------------" >> mongo_backup_output.log
mongodump --archive=$DEST$DAYOFWEEK.gz --gzip >> mongo_backup_output.log
答案 0 :(得分:5)
可能是因为mongodump
的输出是标准错误,而不是标准输入(a)。如果是这样,你可以使用2>&1
方法(它的位置很重要,它必须在输出重定向之后):
runSomeTask >>mongo_backup_output.log 2>&1
这个2>&1
位的作用是将标准错误(文件句柄2)发送到标准输出(文件句柄1)当前所在的同一位置,有效地将标准输出和标准错误发送到同一个地方
在任何情况下,如果要捕获整个脚本的输出/错误,您应该使用exec
的无参数形式。这个命令通常会将一个新程序带入进程并执行它,但如果你没有给它一个程序,它只会修改当前程序。
换句话说,比如:
#!/usr/bin/env bash
exec >>mongo_backup_output.log 2>&1
# ALL output/error will now go to that file, don't have
# to explicitly redirect every single command.
DEST="/db_backups/"
DAYOFWEEK="$(date +%u)"
echo "---------------------- $(date) -----------------------"
mongodump --archive=${DEST}${DAYOFWEEK}.gz --gzip
(a) mongodump
也可能生成任何输出,但我会假设您已经检查过: - )