pg_dumpを2つのpsqlファイルとログファイルにプッシュしようとしていますが、端末にノイズを追加したくありません。
このツールに関する多数の投稿を作成した後、tee
このコマンドに達しました。うまくいきますが、コンソールがまだフラッディングされているだけです。
pg_dump -a -t table-country -p 5432 -U usr db-maint2 2>&1 | tee >(psql -p 5432 -U postgres db-project) >(psql -p 5432 -U postgres db-gp-projet) >"initDB_$(date +%Y%m%d_%H%M).log"
読みましたが、より良い解決策が見つかりませんでした。
また、私のコマンドの後、pg_dumpの標準出力はコンソールに表示されますが、両方のpsqlのログはログファイルではなく端末にのみ送信されます。
編集:良いです。 psqlをログファイルに出力する方法を見つけました。
pg_dump -a -t table-country -p 5432 -U usr db-maint2 2>&1 | tee >(psql -p 5432 -U postgres db-project >"initDB_$(date +%Y%m%d_%H%M).log") >(psql -p 5432 -U postgres db-gp-projet >"initDB_$(date +%Y%m%d_%H%M).log") >"initDB_$(date +%Y%m%d_%H%M).log"
実際、これはpsqlコマンドの1つだけを記録し、-a
teeを使用してハンドルを追加しても、file.logにはpsql出力のみが生成されます。
N番目の編集:もうアイデアはありません。
n^+1 編集: もちろん、私の脳はついに目覚めました。
ベストアンサー1
pg_dump -a -t table-country -p 5432 -U usr db-maint2 2>&1 | tee -a >"${LOGFILE}" >(psql -p 5432 -U postgres db-project >>"${LOGFILE}") >(psql -p 5432 -U postgres db-gp-projet >>"${LOGFILE}")
なぜ?
左から右へ:
pg_dump
標準出力に移動2>&1
エラーストリームを標準出力にダンプする|
パイプ標準出力とエラー- to
tee -a
、パイプの内容を保存し、複数のコマンドに渡します(最小の追加オプションを使用して最初に渡すとき)。 >"${LOGFILE}"
まず、pg_dump stdoutまたはerroutを記録したいと思います。次の構文に注意してください。()
ファイル名の周りには何もありません。私のスクリプトで変数を使用しています。>(psql -p 5432 -U postgres db-project >>"${LOGFILE}")
次に、psqlコマンドで最初のCOPY(角括弧で囲まれたコマンド)>>"${LOGFILE}"
前の行では、psqlの標準出力を私のファイルに追加(二重)するために使用しました>
。ここではエラーは発生しません。可能です。>(psql -p 5432 -U postgres db-gp-projet >>"${LOGFILE}")
次に、2番目のpsqlコマンドが提供され、stdoutがログファイルに2番目に追加されます。- コンソールへの出力はなく、すべてがteeによって保存されているようです(正直なところ、なぜそうなのかわかりません)。
一部の人々がティーとパイプのユースケースを理解するのに役立つことを願っています。
編集:私の最後のコマンドは
pg_dump -a -t table-country -p 5432 -U usr db-maint2 2>&1 | tee -a > /dev/null >(psql -p 5432 -U postgres db-project >>"${LOGFILE}") >(psql -p 5432 -U postgres db-gp-projet >>"${LOGFILE}")
ログファイルを汚染するのではなく、標準出力を削除します。エラーストリームをログファイルに保存することをお勧めします
pg_dump -a -t table-country -p 5432 -U usr db-maint2 2>"${LOGFILE}" | tee -a > /dev/null >(psql -p 5432 -U postgres db-project >>"${LOGFILE}") >(psql -p 5432 -U postgres db-gp-projet >>"${LOGFILE}")
しかし、まだテストしていません。