Intereting Posts
Какой системный вызов используется для загрузки библиотек в Linux? почему все сильно реагирует при передаче данных на USB-накопитель на 32 ГБ? Выйти из bash, когда find попадает в папку с разрешенным разрешением Как найти только поиск файлов в измененных каталогах? Модуль ядра для клиента Cisco VPN не компилируется под ubuntu 10.04 LTS? Синтаксическая ошибка возле неожиданного токена '{' Ошибка при создании модуля Linux для беспроводного драйвера как заново смонтировать домашний каталог определенного пользователя в раздел Изображение dd слишком велико для восстановления Как исправить странное приглашение bash на сервере Debian (Squeeze)? Как установить реальный Thunderbird на Debian? Загрузочный раздел grub / systemd Пользовательские данные в evince и cups Как отключить предупреждение gnuclient Emacs в kill-buffer Преобразование видео с нарушенной информацией о кодеке

Как скопировать файлы с других серверов, если локальная машина не работает

У меня есть сценарий, который будет работать на каждом сервере и копирует в него определенные файлы. Скрипт знает, где я работаю, и какие файлы мне нужно копировать.

Сценарий будет копировать файлы из локального локального центра данных local_dc но если он не работает или не отвечает, он будет копировать те же файлы из удаленного центра обработки данных remote_dc_1 а если он также не работает, то он будет копировать те же файлы из другого удаленного центра данных remote_dc_2 как показано ниже –

 do_Copy() { el=$1 PRIMSEC=$2 scp david@"$local_dc":"$dir3"/new_weekly_2014_"$el"_200003_5.data "$PRIMSEC"/. || scp david@"$remote_dc_1":"$dir3"/new_weekly_2014_"$el"_200003_5.data "$PRIMSEC"/. || scp david@"$remote_dc_2":"$dir3"/new_weekly_2014_"$el"_200003_5.data "$PRIMSEC"/. } export -f do_Copy # copying 5 files in parallel simultaneously in primary and secondary folder parallel --retries 10 -j 5 do_Copy {} $PRIMARY ::: $primary_partition & parallel --retries 10 -j 5 do_Copy {} $SECONDARY ::: $secondary_partition & wait echo "All files copied successfully." 

Теперь мой вопрос:

  • Скажем, если машина local_dc выключена, то обязательно ли она будет скопирована с машины remote_dc_1 ? И если машина remote_dc_1 также не работает, то она также будет скопирована с remote_dc_2 ?
  • Теперь, если все три машины опущены, что произойдет? В этом случае я хочу напечатать сообщение, говорящее, что все три машины выходят из сценария оболочки.

Я не могу проверить это правильно, не выключая машину.

Да. Он попытается скопировать с первого, если это не удастся, он попробует второй, и если это тоже не сработает, он попробует третий. Чтобы он был отправлен вам по электронной почте в конце, используйте следующее:

 scp ... || scp ... || scp || echo "All attempts failed" | mailx -r "foo@bar.com" 

Чтобы каждая команда scp сообщила вам, если она не удалась, вы можете использовать подоболочки:

 scp ... || (echo "machine1 down" | mailx -r "foo@bar.com"&& scp ... ) || ( echo "machine2 down" | mailx -r "foo@bar.com" && scp ... ) || echo "All attempts failed" | mailx -r "foo@bar.com" 

То, что произойдет, будет основано на любых командах, которые вы скажете, чтобы ваш скрипт запускался. Я не мастер-кодер, но у меня недавно была аналогичная ситуация.

То, что я сделал, это просто создать несколько переменных для возможных серверов, а затем использовать цикл для проверки соединения с этим IP-адресом, когда он найдет на этом работает, установить этот IP как тот, который будет использоваться (FTPHOST):

USER = имя пользователя

PASS = пароль

attempt1 = your.first.server.ip

attempt2 = your.second.server.ip

attempt3 = your.third.server.ip

curl –connect-timeout 5 ftp: // $ USER: $ PASS @ $ попытка1 >> / dev / null 2> & 1;

если [$? == '0'];

 then FTPHOST=$attempt1; echo "FTPHOST set to $FTPHOST" else echo "Connection to $attempt1 failed. Attempting next IP"; curl --connect-timeout 5 ftp://$USER:$PASS@$attempt2 >> /dev/null 2>&1; if [ $? == '0' ]; then 

и т. д. и т. д., повторите цикл для любого количества возможных IP-адресов, которые у вас есть до тех пор, пока они не найдут на этом основании. Если ничего не работает, то, конечно, вы не будете загружать что-либо оттуда, чтобы ваш сценарий действовал соответствующим образом.