次のコマンドは、件名と本文が空のメールの送信を開始します。
mailx -s "Daily Extract" $RESULT_EMAIL < $LOG
$RESULT_EMAIL
- 確認された配布リストが含まれています。
$LOG
- 確認された電子メールの内容が含まれています。
今、あなたの電子メールがタイトル行なしで空である理由を知っていますか?
これは、通常のパッチが適用されたPRODサーバーにあります。おそらくJavaのバージョンですか? Red Hatサーバーのバージョン? mailxはXXXバージョンでは動作しませんか?
$LOG
- 電子メールのテキストが含まれています。良い...This is the body of the Email. The email verifies that you have subscribed to us...
新しいメッセージはサーバーのコマンドラインを使用し、mailx機能は電子メールを送信します。
シェルスクリプトはAtomic Scheduler(UC4)で実行されます。したがって、UC4は午前6時にシェルスクリプトを実行する予定です。 mailx コマンドはこのシェルスクリプト内にあります。
私はあなたが要求した情報を得るために努力します。
cat /etc/os-release
[ ]
lsb_release -a
Command not found
答え1
コマンドの後に文字列を実行すると、<
シェルはその文字列をファイル名として使用し、そのファイルの内容はコマンドの標準入力ストリームにリダイレクトされます。
つまり、実行時に
mailx -s 'Daily Extract' "$RESULT_EMAIL" <"$LOG"
...その後、変数内のすべてがLOG
次のように使用されます。ファイル名。ファイルが存在しない場合は、メッセージ本文なしでメッセージが送信されます(コマンドを手動で実行する場合は、端末に「該当するファイルまたはディレクトリなし」エラーメッセージも表示する必要があります)。
しかし、その中に含まれる内容は、送信しようとするLOG
メッセージのテキストのようです。この場合、これらのリダイレクトは使用できず、変数の値が$LOG
標準入力ストリームに渡されるようにする必要がありますmailx
。
私たちはこれを次のように使用できますprintf
:
printf '%s\n' "$LOG" | mailx -s 'Daily Extract' "$RESULT_EMAIL"
または、次の文字列を使用します(一部のシェルでサポートされています)。
mailx -s 'Daily Extract' "$RESULT_EMAIL" <<<"$LOG"
または、ここで説明されているリダイレクトを使用してください。
mailx -s 'Daily Extract' "$RESULT_EMAIL" <<END_MESSAGE
$LOG
END_MESSAGE