Поддерживайте соединение SSH при перемещении большой папки

Контекст:

У меня есть веб-сервер (мой хостинг-провайдер - OVH).

У меня есть большая папка с большим количеством файлов во многих подкаталогах (100k+ файлы).

Мне нужно переместить этот каталог из одного места в другой на моем хостинге.

После того, что я прочитал в Интернете и в StackOverflow, я думаю, что лучший способ - использовать команду mv.

На самом деле, мне просто нужно переместить всю папку и все ее содержимое (что-то вроде "переименования"), и я считаю, что мой путь назначения находится в одной файловой системе (но я не могу этого гарантировать).

Поэтому я планирую сделать это:

mv /home/www/folder1/myfolder /home/www/folder2/myfolder &

(Я буду использовать "&" для выполнения команды в фоновом режиме без блокировки)

Чтобы выполнить эту команду, я могу подключиться к своему веб-хостингу через SFTP с помощью команды ssh:

ssh username@address

Проблемы:

Когда я делаю это (я из Windows 10), через несколько минут у меня появляется ошибка (наверное, из-за моей неактивности):

Connection reset by <IP_ADDRESS> port 22

Я боюсь, что после запуска моей команды mv, как это должно занять некоторое время, мое ssh-соединение будет закрыто с этой ошибкой...

Чтобы избежать закрытия соединения, я попытался создать файл ~/.ssh/config на моем клиенте со следующим содержимым, как описано здесь:

Host *
ServerAliveInterval 240

Я тоже сделал chmod

chmod 600 ~/.ssh/config

Затем, когда я пытаюсь запустить мое SSH-соединение из Windows PowerShell, у меня появляется ошибка

Bad owner or permissions on C:\\Users\\antoi/.ssh/config

Затем я попытался из git bash, и у меня нет этой ошибки, соединение ssh открывается без ошибок.

НО тогда у меня есть другая ошибка через несколько минут, и мое соединение также закрыто:

attente de données expirée : déconnexion automatique

У меня нет сообщения на английском, но должно быть что-то подобное

expired data wait: automatic logout

Вопросы:

Можете ли вы сказать мне, будет ли моя команда mv продолжать выполняться на сервере, даже если мое соединение SSH было потеряно?

Если ответ НЕТ, знаете ли вы, как я могу обеспечить поддержку моего ssh во время операции перемещения?

заранее спасибо, я не могу выполнить миграцию без этих ответов, так как было бы слишком опасно, если мои данные повреждены или находятся в неизвестном состоянии!

4 ответа

Можете ли вы сказать мне, будет ли моя команда mv продолжать выполняться на сервере, даже если мое соединение SSH было потеряно?

Это зависит от дистрибутива Linux, но скорее всего - нет. Когда вы запускаете процесс в фоновом режиме, он уничтожается после завершения работы оболочки.

Если ответ НЕТ, знаете ли вы, как я могу обеспечить поддержку моего ssh во время операции перемещения?

На мой взгляд, лучший способ - не пытаться угадать, как долго он будет работать, а просто запустить команду на переднем плане (удалить &):

mv /home/www/folder1/myfolder /home/www/folder2/myfolder

Почему вы запускаете команду в фоновом режиме, если больше ничего не будете делать и оставите свою оболочку неактивной?


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

chown antoi:antoi ~/.ssh/config

(где antoi ваше имя пользователя)

Если ваша цель — «переместить файлы», а не «поддержать соединение», простой способ — использоватьnohup, т.е. измените свою команду на

      nohup mv /home/www/folder1/myfolder /home/www/folder2/myfolder &

Таким образом, вы можете отключить сеанс SSH, и команда продолжит работать на сервере, хотя вам может потребоваться использоватьpsчтобы проверить, завершилась ли операция перемещения позже.

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

Если мне нужно сделать операцию, которая занимает некоторое время по ssh, я обычно использую screen и запустить команду изнутри. Другой подобный инструмент tmux,

Оба должны пережить разрыв соединения, и после восстановления соединения вы все равно сможете снова подключиться к сеансу (для screen-r вариант сделаю так).

Если вы проходите SSH, вы должны изучить scp. Это не удалит существующие файлы, но абсолютно скопирует файлы и поддержит соединение ssh:

scp -r / local / directory / username @ to_host: / remote / directory /

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

Другие вопросы по тегам