为此,我正在运行一个 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 ...
...