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

由于命令的相互依赖性,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  ...
...

相关内容