説明する: SSL証明書の有効期限についてユーザーに通知するのに役立つ小さなスクリプトで遊んでいます。証明書が30日以内に期限切れになった場合はユーザーに通知し、それ以外の場合は何もしません。
ただし、奇妙な理由でより大きな定数で検証すると、電子メールが送信されてもこれは発生しません。
コードは次のとおりです。
#!/bin/ksh
legend="The next certificate almost expires.\n URL: url.com "
count=30
daysleft=$(./ssl-cert-check -d /etc/ssl/certs/cert.cer | awk '{print $6}' | tail -n 1);
#daysleft=50 #Constant to do some test
sendnot=$(echo $legend | mail -s "url.com SSL cert Expiration" [email protected] < <(./ssl-cert-check -d /etc/ssl/certs/cert.cer))
if [[ $daysleft -lt $count ]];
then
echo "Sending note"
echo $sendnot
else
echo "Doing nothing..."
fi
定数を使用してテストすると機能するとdaysleft
宣言されますが、コメントはユーザーに送信されます。
編集する: 出力:
./ssl-cert-check -d /etc/ssl/certs/cert.cer | awk '{print $6}' | tail -n 1
is 9
ご質問やご意見がございましたら、参加する準備ができています。あいさつ! !
答え1
この行は:
sendnot=$(echo ... | mail ... < <(./ssl-cert-check ...))
走るcommandを実行しecho
、mail
そこ./ssl-cert-check
からの出力であるバッチ全体の出力をキャプチャしてmail
変数に割り当てますsendnot
。これが、あなたが次に関係なく送信された電子メールを受け取る理由です。もし-声明。また、mail
ここには多くの出力がないので、コマンド置換を使用する必要はないようです。
後で使用するためにコマンドを保存するには、関数として作成します。
send_notice() {
local subject=$1
echo "some message" | mail -s "$subject"
}
...
if whatever...; then
send_notice "subject line..."
fi
($1
関数の最初のパラメータになります。)
また、コマンドには別の問題があります。パイプとtoの両方を使用しているため、mail
コマンドの標準入力に2つの異なる項目を関連付けることができないため、1つだけが適用されます。リダイレクトが複数ある場合、パイプとリダイレクトを使用すると、最後の有効なリダイレクトになります。
したがって、あなたのコマンドは実際には次のようになります。
mail -s ... < <(./ssl-cert-check ...)
つまり、echo
実際に何もせずに。
両方のコマンドの出力を接続するには、次の手順を実行する必要があります。
(echo "some message"; ./ssl-cert-check ...) | mail ...