Удаленное выполнение кода после перезагрузки tmux

370
MichaelSB

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

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

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

3

1 ответ на вопрос

2
Kamil Maciorowski

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

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

Даже если вы намеревались использовать 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сеансе, запущенном как два месяца назад.

Вау, это замечательно, и так очевидно в ретроспективе :) MichaelSB 6 лет назад 0

Похожие вопросы