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