![앰퍼샌드 사이에서 bash 명령 시간 초과가 가능합니까?](https://linux55.com/image/158268/%EC%95%B0%ED%8D%BC%EC%83%8C%EB%93%9C%20%EC%82%AC%EC%9D%B4%EC%97%90%EC%84%9C%20bash%20%EB%AA%85%EB%A0%B9%20%EC%8B%9C%EA%B0%84%20%EC%B4%88%EA%B3%BC%EA%B0%80%20%EA%B0%80%EB%8A%A5%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
이를 위해 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으로 인해 발생하는 모든 네트워크 오류는 0이 아닌 종료로 이어져 불완전한 이벤트 체인이 발생할 가능성이 높습니다.
이것은 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 ...
...