3

Я читал о tmux-resurrect , но мне все еще не ясно, могу ли я сделать следующее:

  1. начать сеанс tmux
  2. ssh на удаленный сервер
  3. запустить долгосрочный код на удаленном хосте
  4. убить сервер tmux (например, перезагрузка локальной машины)
  5. восстановление и повторное подключение сеанса tmux (например, с помощью tmux-resurrect)
  6. продолжить мониторинг кода, который я запустил на удаленном сервере

Нужно ли использовать nohup на шаге 3? или tmux-resurrect (или другой инструмент) может позаботиться об этом?

1 ответ1

4

Никакой локальный инструмент не может сделать это из-за того, что сервер "видит":

  • если вы корректно отключите SSH, сервер немедленно это заметит;
  • если вы просто исчезаете (например, путем аппаратного сброса), соединение будет оставаться открытым на стороне сервера до некоторого времени ожидания (сравните параметры ClientAlive* , концепцию TCP keepalive - см. этот ответ для некоторых деталей).

Даже если вы намеревались использовать tmux-resurrect или другой инструмент на локальной стороне, сервер не знает, ему все равно. Это прервет ваш долго работающий код, если вы не использовали nohup или лучше ...

Если вы можете, используйте tmux (или screen) на сервере:

  1. Не входите в сеанс tmux на клиенте.
  2. ssh к серверу.
  3. Запустите сеанс tmux на сервере.
  4. Запустите долгосрочный код там.
  5. Разъединить как угодно: изящно или нет, с отсоединением tmux или без него.
  6. ssh снова.
  7. Ваша сессия tmux все еще там (если что-то плохое не случилось с сервером за это время); соедините с tmux a .

Я использую tmux каждый день и считаю, что это правильный путь. На моем ноутбуке сессии tmux длятся не более нескольких часов, я выключаю их каждую ночь; но у меня есть доступ к нескольким серверам, где мои сессии tmux работают месяцами. Когда я пишу это, на одном из них есть процесс watch df -h работающий буквально неделю в сеансе tmux запущенном как два месяца назад.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .