Microsoft Exchangeバナーを監視したいと思います。
コンソールでコマンドを実行すると、次のようになります。
timeout 1 openssl s_client -connect 192.168.0.5:995 > /tmp/1.txt
出力:
tail -n 4 /tmp/1.txt:
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
+OK The Microsoft Exchange POP3 service is ready.
このコマンドをcronに追加すると、次のような結果が出力されます。
tail -n 4 /tmp/1.txt
Start Time: 1488382801
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
クローンとコンソールの違いは何ですか?ありがとうございます。
答え1
で実行すると、cron
リモートサーバーがバナーを送信する前に接続が閉じられる可能性があります。これはopenssl s_client
、stdioとリモートサーバーのソケット間で双方向接続が実行されるためです。
- stdinをソケットにコピーします。
- ソケットから受け取ったデータを標準出力にコピーします。
で実行するとcron
stdinがに接続されているため、最初のコピーはすぐに終了し/dev/null
ますopenssl
。
openssl
永久にブロックされたコンテンツに入力をリダイレクトすることでこれを軽減することができ、より良い方法はsleep 1
そのコンテンツの必要性を排除することですtimeout
。
それにもかかわらず、しばらく待つことは、バナーを接続して待つのに特に簡単ではありません。かなり短いタイムアウトであるだけでなく、バナーが受信されると、タイムアウトが期限切れになる前にコマンドは終了しません。このようなものを探していますexpect
。
ちなみに:
他の人は同意しないかもしれませんが、私はこの質問で「コンソール」という言葉を使用したことが正確ではないと思います。実際に最初に説明した動作が表示されます。どのターミナルセッションは何よりも次のことができます。
- SSH端末セッション、
xterm
GUIのターミナルエミュレータ(類似または最新の代替)- 窓
screen
、 - シリアルモデム接続、
- または実際のシステムコンソール。
「コンソール」という言葉は、特に最後のセッションを指すべきだと思います。しかし、これはすべてターミナルセッションです。
答え2
Cron は、ジョブで最小限の環境変数セットを使用します。コンソールで使用する以上のアドインを使用することもできます。
コマンドを使用すると、コンソールとcronでtimeoutsとopensslを使用するときにwhich <programname>
どこにいるかを確認できます。
PATH
スクリプトの先頭に変数を設定することもできます。