以前に作業していたサーバーでコメントを見つけましたが、リダイレクトが正しくないようです。誰かが確認できますか?
これは、このHP-UXサーバーで実行されているアプリケーション/データベースを維持するサードパーティベンダーによって作成されたcrontabのエントリです。
15 21 * * 0-6 /usr/sys/bin/stop q >/stopout 2<&1 #
30 21 * * 0-6 /usr/sys/force q >/out 2<&1 #
55 23 * * 0-6 /usr/sys/start q >/startout 2<&1 #
Bashのマニュアルでこれを見つけましたが、これはstderrとstdoutが> / {stopout、out、startout}に行き、stderrがstdoutをコピーすることを意味します(stdoutがstopout、out、startoutに2回書き込まれることを意味しますか?)?混乱しています:)
3.6.8 Duplicating File Descriptors
The redirection operator
[n]<&word
is used to duplicate input file descriptors. If word expands to one or more
digits, the file descriptor denoted by n is made to be a copy of that file
descriptor. If the digits in word do not specify a file descriptor open for
input, a redirection error occurs. If word evaluates to ‘-’, file descriptor n
is closed. If n is not specified, the standard input (file descriptor 0) is
used.
答え1
これはオタイルの可能性が高いです2>&1
。>foo 2>&1
cronjobの出力とエラーを保存する簡単な方法は、crontabでよく見られます(参照)。だから、大学と大学、アフリカ連合,...).
気づく:
- ここでfd 1は書き込み用に開かれました(
>/stopout
と同じ1>/stopout
)。 - これを行うかfd 2を
2>&1
実行し2<&1
ても、次のようになります。dup2
'd(少なくともLinuxでは、たぶん他のプラットフォームでも同様)をfd 1として指定するので、fd 1と同じ方法で使用できます。- これは、fd 1に書き込まれたデータがfd 2に入力として送信されるという意味ではなく、fd 1と2が同じであることを意味します。
- したがって、fd 2への書き込みは失敗せず、
/stopout
fd 1に書き込むデータのように送信されます。
ただし、fd 1 が最初に読み取るために開かれると、どちらか一方への書き込みは失敗します。
$ strace -e write bash -c 'echo bar 1<foo 2<&1'
write(1, "bar\n", 4) = -1 EBADF (Bad file descriptor)
write(2, "bash: line 0: echo: write error:"..., 53) = -1 EBADF (Bad file descriptor)
+++ exited with 1 +++