0

セッションでコマンドの出力を表示し、終了時にメールで送信するセッションで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何が問題なのかわかりません。

これを機能させるために何ができますか?

4

1 に答える 1