アンパサンド間でbashコマンドのタイムアウトは可能ですか?

アンパサンド間でbashコマンドのタイムアウトは可能ですか?

これを行うには、cronジョブを実行していますが、まだ最後のコマンドに到達していないことがわかりました。ただし、一部のコマンドは時間がかかります。たとえば、それぞれ20〜30分かかります。

cd /some_file_path/ && 
  wget [some url] -O dd.csv &&
  csvjoin --outer -c VendorStockCode,sku dd.csv dicker.csv > dd_joined.csv &&
  csvcut -c Vendor,VendorStockCode,StockDescription,PrimaryCategory,SecondaryCategory,TertiaryCategory,DealerEx,StockAvailable,overview,specs,multi_images dd_joined.csv > dd_joined_cut22.csv &&
  wget -q -O - [some url]

しかし、cronジョブが実行された翌日にも最終コマンドは到着しませんでした。

  • すべてのコマンドが限られた時間だけ個別に動作し、合計実行時間が1日未満であると仮定すると、1日が経過してもコマンド全体が完了しないのはなぜですか?
  • 接続アンパサンドの使用に関連するタイムアウトの問題ですか?
  • 上記のコマンドスキームで明らかな論理的な欠陥を発見した人はいますか?

ベストアンサー1

コマンドの相互依存性により、wgetによって引き起こされるすべてのネットワークエラーはゼロ以外のシャットダウンにつながり、不完全なイベントチェーンが発生する可能性が高くなります。

これはcronなので、できることは限られているので、このロジックを単純なbashスクリプトに移動することをお勧めします。

大量のデータを取得したい場合は使用できますアリア2ダウンロード速度は速いですが、ソースが動的かどうかによって異なります。

簡単な解決策は、強制的に再試行して終了信号を捕捉することです。

cd path/to

while [ 1 ]; do
    wget --retry-connrefused --waitretry=1 --read-timeout=20 --timeout=15 -t 0 -c [download link]
    if [ $? = 0 ]; then break; fi
done

csvjoin  ...
...

おすすめ記事