З цим я стикався і rsync
в минулому. Для мене це рішення вирішило запустити його протягом screen
сеансу, який міг допомогти підтримувати з'єднання з віддаленим сервером.
screen -LS rsync
[execute your rsync command]
Ctrl-A+D to detach from the session
Ви можете перевірити стан, запустивши screen -x rsync
(або як ви вирішите назвати сеанс, якщо ви дасте ім'я, яке не потрібно). Це відновить вашу поточну оболонку до цього сеансу. Просто не забудьте знову від'єднатись від нього після перевірки стану, щоб він продовжував працювати у фоновому режимі.
Ви також можете виконати команду для запуску screen
у фоновому режимі одним махом, зробивши [хтось, будь ласка, виправте мене, якщо я помиляюся] screen -dm 'command'
. Можливо, ви захочете, man screen
перш ніж спробувати останню.
Редагувати:
Я редагую свою відповідь, оскільки ви підтвердили, що screen
не допомагаєте в цьому сценарії, але ви відповіли на мій коментар, запропонувавши спробувати scp
і побачити, які результати ви отримаєте, на що ви відповіли, що це не дивно, але це спрацювало чудово.
Тому моя нова відповідь така: використовувати scp
- або ssh
(з tar
) - замістьrsync
Звичайно, scp
не підтримує величезну кількість функцій , як rsync
, але ви на самому справі будете здивовані , щоб виявити, скільки функцій , які він робить підтримку, які майже ідентичні , що і rsync
.
Реальні сценарії scp
та інші альтернативи rsync
:
Тим часом я мав завдання створити скрипт оболонки, який би витягував журнали з наших виробничих серверів і зберігав їх локально на веб-сервері, щоб розробники могли отримати доступ до них для усунення несправностей. Після невдалої спроби змусити команду Unix встановити rsync
на наші сервери, я придумав вирішення проблеми, scp
яка також працювала.
Попри це, я нещодавно змінив сценарій, щоб все, що він використовує, було ssh
і tar
- GNU tar
/ gtar
, якщо бути точним. GNU tar
підтримує багато варіантів, які ви дійсно знайдете rsync
, наприклад --include
, --exclude
збереження дозволів / атрибутів, стиснення тощо.
Я зараз це ssh
досягаю шляхом приєднання до віддаленого сервера (через pubkey auth) та використання gtar -czf - [other options such as --include='*.log' and --exclude='*core*', etc.]
- це записує всю інформацію до того stdout
, що потім [локально] передається, щоб tar -xzf
на віддаленому сервері виробництва не було внесено змін , і всі файли, переведені як є на локальний сервер. Це чудова альтернатива rsync
в цьому випадку. Єдине, що важливо, tar
ані scp
підтримка - це додаткові резервні копії та рівень перевірки помилок на рівні блоку rsync
.
Повна команда, яку я маю на увазі при використанні, ssh
і tar
буде щось подібне (віддалений - Solaris 10; місцевий - Debian, для чого це варто):
cd /var/www/remotelogs
ssh -C user@remotehost "cd /path/to/remote/app.directories; gtar -czf - --include='*.log' --exclude='*.pid' --exlude='*core*' *" | tar -xz
У вашому сценарії все було б навпаки - tar -cf -
локально, і передача на віддалений сервер через ssh user@remotehost "tar -xf -"
- є ще одна відповідь, яка посилається на такий тип поведінки, але не вникає в стільки деталей.
Є кілька інших варіантів, які я включив для прискорення речей. Я невпинно призначав усе, щоб максимально скоротити час виконання. Ви можете подумати, що використання компресії за допомогою tar
буде безглуздим, але це насправді трохи прискорює роботу, як і використання -C
прапора з ssh
тим, щоб увімкнути ssh
стиснення. Пізніше я можу оновити цю публікацію, щоб включити точну команду, яку я використовую (яка дуже схожа на ту, яку я опублікувала), але я не відчуваю, як потрапляти на VPN в той момент, коли я перебуваю у відпустці цього тижня.
На Solaris 10 я також використовую -c blowfish
, тому що це найшвидший шифр для автентифікації, а також допомагає прискорити роботу, але наші Solaris 11 або не підтримують його, або цей пакет шифрів відключений.
Крім того, якщо ви вирішите перейти з ssh
/ tar
опцією, насправді було б гарною ідеєю реалізувати моє оригінальне рішення використання, screen
якщо ви робите резервну копію, яка займе деякий час. Якщо ні, то переконайтеся, що ваші налаштування збереження / тайм-аут у вашому режимі ssh_config
налаштовані правильно, інакше цей метод також може призвести до поломки труби.
Навіть якщо ви їдете з цим scp
, я завжди вважаю, що це найкраща практика для використання screen
або tmux
під час виконання подібних операцій, про всяк випадок . Багато разів я не дотримуюсь власних порад і не можу це зробити, але це справді хороша практика використовувати один із цих інструментів, щоб гарантувати, що віддалене завдання не вичерпається через те, що ваш активний сеанс оболонки якимось чином відключається.
Я знаю, що ви хочете з’ясувати першопричину вашої rsync
проблеми. Однак якщо це дійсно важливо, це два чудових вирішення, з якими ви зможете експериментувати.
kerberos
для автентифікації на віддаленому сервері.