Назад | Перейти на главную страницу

Остановить wget, забивая локальный файл, если сервер недоступен

У меня есть задание cron на сервере, который раз в день использует wget чтобы загрузить "Параметры ориентации Земли" и данные за секунду с сервера НАСА. В частности:

wget https://gemini.gsfc.nasa.gov/500/oper/solve_apriori_files/usno_finals.erp -O .eops
wget https://gemini.gsfc.nasa.gov/500/oper/solve_apriori_files/ut1ls.dat -O .ut1ls

Это прекрасно работает. Однако кажется, что когда сервер недоступен, wget затирает мои локальные файлы (размер файла 0). Есть ли способ сказать wget для отмены, если сервер недоступен, и оставить локальный файл нетронутым. (Файлы содержат прогнозы на пару месяцев, поэтому пропустить обновление в течение нескольких дней, пока сервер не вернется, не проблема).

Это задокументированное поведение -O, поэтому вам не следует использовать его, если это не то поведение, которое вам нужно.

По умолчанию wget именует файлы, используя то же имя, что и сервер (в зависимости от версии), или, если оно не задано, базовое имя URL. Поскольку вам нужно другое имя, вы должны воспользоваться этим.

Например, вы можете загрузить файл, а затем скопировать его поверх существующего файла, только если загрузка прошла успешно.

wget https://gemini.gsfc.nasa.gov/500/oper/solve_apriori_files/usno_finals.erp && \
mv usno_finals.erp .eops

Так как wget истекло время, нет usno_finals.erp был создан, wget вернул код выхода из ошибки и mv никогда не звонили.

Когда кто-то в Годдарде вытащит голову из своего ... чего угодно ... и исправит свой сервер, вы увидите, что файл создается, как ожидалось.