Поддерживайте соединение 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. Он управляется с помощью графического интерфейса, но имеет мощную командную строку, и вы можете создавать сценарии передачи с помощью нескольких простых флагов.