セッションでコマンドの出力を表示し、終了時にメールで送信するセッションでbash
コマンドを実行するスクリプトを作成しようとしています。screen
ただし、常に機能するとは限らず、その理由はわかりません。以下の例の動作を抽出しました。
コマンド
ls | tee >(mail -s 'my subject' me@example.co.uk)
毎回正常に動作します。
bash -c "ls | tee >(mail -s 'my subject' me@example.co.uk)"
ただし、コマンド
screen -dmS foo bash -c "ls | tee >(mail -s 'my subject' me@example.co.uk)"
時々しか機能しません。
このコマンド構造の理由は、切り離されたscreen
セッションでスクリプトを起動するために cron ジョブで使用されるため (ユーザーはスクリプトの出力をリアルタイムで表示するために再アタッチできるため)、スクリプトが完了すると出力を電子メールで送信するためです。ls
問題をテストして実証するために、例のスクリプトを に置き換えました。
私はtail -f /var/log/mail.log
郵便物が発送されているのを見ていました。このコマンドを 10 回実行しましたが、screen
送信されたメールは 2 つだけでした。もう少し難しいテストを行うために、次のようにしました。
for i in {1..100}; do screen -dmS test_$i bash -c "ls | tee >(mail -s 'screen test $i' me@example.co.uk)"; done
その結果、100 件のメールのうち 39 件が送信されました。
これはもともと OSX で行われたものですが、Linux ボックスでもテストしたところ、同様の動作が見られました。サブシェルと関係があると思いますが、screen
何が問題なのかわかりません。
これを機能させるために何ができますか?