スクリプト内のcURL

スクリプト内のcURL

HTTPSを介してWebサーバーから特定のファイルをダウンロードできないように、ネットワークファイアウォールによって断続的に(ランダムに)ブロックされるFreeBSDサーバーのいくつかの問題を解決しようとしています。ブロックが発生した場合に何が起こるかを理解するには、次のcURLを実行する必要があります。

curl --interface nic1 --verbose --insecure 'https://speed.hetzner.de/100MB.bin' > /dev/null

次に、コマンドのstderrを読みます。しかし、問題は予期しないランダムな時間に発生するので、このカールを10秒ごとに実行し、stderrをファイルに保存して後で表示できるようにしたいと思います。cURLScriptこれを達成するには、次のスクリプト(名前)を使用します。

#!/bin/sh
while true
do
    date
    echo "================================="
    curl --interface nic1 --verbose --insecure 'https://speed.hetzner.de/100MB.bin' > /dev/null  2>&1
    echo ""
    sleep 10
done

次にスクリプトを実行します。

/bin/sh cURLScript > log &

logファイルにstderrが含まれると予想しましたが、logstderrはありません。

Svr12loc:service 21] cat log
Thu Mar 24 16:42:34 CET 2022
=================================

Thu Mar 24 16:43:03 CET 2022
=================================

Thu Mar 24 16:43:33 CET 2022
=================================

Thu Mar 24 16:44:02 CET 2022
=================================

Thu Mar 24 16:44:32 CET 2022
=================================

Thu Mar 24 16:45:00 CET 2022
=================================

誰もが私がここで何を間違っているかを提案できますか?

ベストアンサー1

あなたの質問は不明です。私 推測するはい、意味

  • (に送信したいHTMLFILE)cURLのHTML出力には興味がありません。
  • あなたは「詳細な」メッセージに興味があります。
  • 詳細メッセージは(ファイルの代わりに)端末に送信されますLog
  • Log端末ではなくファイルに移動したいです。

Unix(およびUnixのようなオペレーティングシステム、さらには他のいくつかのオペレーティングシステム)では、プログラムには2つの自動出力ストリームがあります。標準出力(略語「stdout」)と標準エラー(略語「stderr」)です。名前が示すように、stdoutはデフォルト出力に使用され、stderrはエラーメッセージと診断に使用されます。デフォルトでは、両方とも端末を指します。と言うと、> HTMLFILEcURLの標準出力をにリダイレクトしますHTMLFILE。ただし、詳細メッセージはstderrに記録されます。

必要なのは、cURLのstderrをスクリプトのstdout(ファイルLog )に送信することです。

これは、Bourneシェルから派生したすべての標準POSIX準拠シェルで簡単です。

#!/bin/sh
本当ではありますが
する
    日付
    エコ「====================================」
    カール --インターフェイス nic1 --verbose --insecure https://www.20min.ch  2>&1  > HTMLページ
    エコ「」
    睡眠10
完璧

2>&1上記とまったく同じです。 stderrをstdoutにリダイレクトします。

Cシェルではもっとトリッキーです。

#!/bin/csh
t=`mktemp` に設定
そして((1))
    日付
    エコ「====================================」
    カール --インターフェイス nic1 --verbose --insecure https://www.20min.ch > HTMLPAGE)  >&"$t"
    猫「$t」
    エコ「」
    睡眠10
終わり

cshでは、>&stdoutとstderrを次のファイルに送信することを意味します。好きなように別の場所に送るのは難しいです。秘密は、stdoutを目的の場所に送信し、次のコマンドを括弧で囲み、ラップされた>&コマンドに使用することです。標準エラーを標準出力に送信する方法がわかりません。 (おそらく方法があり、それが何であるかを知らせると思います。)上記では、stderrを一時ファイルに送信した後  cat

標準シェルからスクリプトを作成することをお勧めします。 Cシェルはスクリプトには適していません。

PS:カールの標準出力を保存したくない場合に送信するにはどうですか/dev/null

おすすめ記事