У меня есть файл bash, содержащий команды wget для загрузки более 100 000 файлов на общую сумму около 20 ГБ данных.
Файл bash выглядит примерно так:
wget http://something.com/path/to/file.data
wget http://something.com/path/to/file2.data
wget http://something.com/path/to/file3.data
wget http://something.com/path/to/file4.data
А всего этого ровно 114 770 строк. Насколько надежно было бы подключиться по ssh к серверу, на котором у меня есть учетная запись, и запустить его? Не истечет ли время моего сеанса ssh? мне нужно было все время ssh'ed? Что делать, если мой локальный компьютер сломался / выключился?
Кроме того, кто-нибудь знает, сколько ресурсов для этого потребуется? Я сумасшедший, желая делать это на общем сервере?
Я знаю, что это странный вопрос, просто интересно, есть ли у кого-нибудь идеи. Спасибо!





Зависит от надежности средства связи, оборудования, ...!
Вы можете использовать screen, чтобы он продолжал работать, пока вы отключаетесь от удаленного компьютера.
Начни с
nohup ./scriptname &
и все должно быть в порядке. Также я бы рекомендовал вам регистрировать прогресс, чтобы вы могли узнать, где он остановился, если это произойдет.
wget url >>logfile.log
могло быть достаточно.
Чтобы следить за прогрессом в режиме реального времени, вы можете:
tail -f logfile.log
Вы хотите отключить скрипт от своей оболочки и запустить его в фоновом режиме (используя nohup), чтобы он продолжал работать после выхода из системы.
Вы также хотите иметь какой-то индикатор выполнения, например файл журнала, в котором регистрируются все загруженные файлы, а также все сообщения об ошибках. Nohup отправляет stderr и stdout в файлы. С помощью такого файла вы можете позже получать прерванные загрузки и прерванные запуски.
Сначала выполните тестовый запуск с небольшим набором файлов, чтобы убедиться, что вы выполнили команду и вам понравился результат.
Я предлагаю вам отсоединить его от оболочки с помощью nohup.
$ nohup myLongRunningScript.sh > script.stdout 2>script.stderr &
$ exit
Скрипт будет выполнен до конца - вам не нужно все время входить в систему.
Обязательно проверьте любые параметры, которые вы можете дать wget, чтобы заставить его повторить попытку в случае сбоя.
Использовать
#nohup ./scriptname &> logname.log
Это обеспечит
Также будет рекомендовать, чтобы вы могли получать некоторые подсказки через регулярные промежутки времени, это будет полезно для анализа журнала. например #echo "1000 files copied"
Что касается использования ресурсов, то оно полностью зависит от системы и, главным образом, от характеристик сети. Теоретически вы можете рассчитать время, используя только размер данных и пропускную способность. Но в реальной жизни возникают задержки, задержки и потери данных.
Так что сделайте некоторые предположения, поработайте математически, и вы получите ответ :)
Если возможно, сгенерируйте контрольные суммы MD5 для всех файлов и используйте их, чтобы проверить, все ли они были переданы правильно.
Как это сделать, не имея файлов в первую очередь? Если он может вычислить MD5 на сервере, с которого он загружает, ему, вероятно, не нужно прибегать к wget / http для их перемещения.
Возможно, стоит взглянуть на альтернативную технологию, например rsync. Я использовал его во многих проектах, и он работает очень и очень хорошо.
./scriptname & не будет продолжаться, если сеанс ssh будет прерван.