Никакой локальный инструмент не может сделать это из-за того, что сервер "видит":
- если вы корректно отключите SSH, сервер немедленно это заметит;
- если вы просто исчезаете (например, путем аппаратного сброса), соединение будет оставаться открытым на стороне сервера до некоторого времени ожидания (сравните параметры
ClientAlive*
, концепцию TCP keepalive - см. этот ответ для некоторых деталей).
Даже если вы намеревались использовать tmux-resurrect
или другой инструмент на локальной стороне, сервер не знает, ему все равно. Это прервет ваш долго работающий код, если вы не использовали nohup
или лучше ...
Если вы можете, используйте tmux
(или screen
) на сервере:
- Не входите в сеанс
tmux
на клиенте.
ssh
к серверу.
- Запустите сеанс
tmux
на сервере.
- Запустите долгосрочный код там.
- Разъединить как угодно: изящно или нет, с отсоединением
tmux
или без него.
ssh
снова.
- Ваша сессия
tmux
все еще там (если что-то плохое не случилось с сервером за это время); соедините с tmux a
.
Я использую tmux
каждый день и считаю, что это правильный путь. На моем ноутбуке сессии tmux
длятся не более нескольких часов, я выключаю их каждую ночь; но у меня есть доступ к нескольким серверам, где мои сессии tmux
работают месяцами. Когда я пишу это, на одном из них есть процесс watch df -h
работающий буквально неделю в сеансе tmux
запущенном как два месяца назад.