に役立つ情報を生成するプログラムstdout
がありますが、からも読み取りますstdin
。標準入力に何も提供せずに、標準出力をファイルにリダイレクトしたい。これまでのところ、とても良い:できること:
program > output
ttyでは何もしません。
ただし、問題はこれをバックグラウンドで実行することです。私が行った場合:
program > output &
プログラムは中断されます(「中断(tty入力)」)。
私が行った場合:
program < /dev/null > output &
EOFに達するため、プログラムはすぐに終了します。
私が必要なのはprogram
、無期限に何もせず、読まない何かにパイプすることstdin
です。次のアプローチが機能します。
while true; do sleep 100; done | program > output &
mkfifo fifo && cat fifo | program > output &
tail -f /dev/null | program > output &
しかし、これは非常にいものです。そこ持ち(言い換えために「無期限に、何もしない」ために、標準のUnixユーティリティを使用して、エレガントな方法であることをman true
)。どうすればこれを達成できますか?(ここでの優雅さの主な基準:一時ファイルなし、ビジー待機または定期的なウェイクアップなし、エキゾチックなユーティリティなし、可能な限り短い。)
su -c 'while true; do true; done | cat > ~/output &' user
?
1<&-
てプログラムを終了すると仮定しますか?
su -c 'program | output &' user
。「サービス/デーモン」を処理するための許容可能な方法としてバックグラウンドジョブを作成することで、同様の質問をしようとしています。STDERR
また、リダイレクトしないとリダイレクトできないことに気付きましたSTDOUT
。programAがprogramBに送信してSTDOUT
からログファイルにSTDIN
リダイレクトSTDERR
するソリューション:programA 2> /var/log/programA.log | programB 2> /var/log/programB.log 1> /dev/null