4

Я запустил тестовое изменение размера файловой системы на сервере через ssh, но совершенно забыл сделать это во время сеанса screen . Сейчас он работает, и у моего ноутбука очень медленный интернет. Есть ли способ сохранить его работоспособным, если я потеряю соединение ssh?

Это также выводит прогресс, но мне не нужно заботиться о его получении.

ОС: эквивалент RHEL7.2 (SL7).

Вероятно, лучше связать это как решение: https://stackoverflow.com/questions/625409/how-do-i-put-an-already-running-process-under-nohup

не знаю, как связать это вместо предложенного, так что не стесняйтесь добавлять это и отмечать как дубликат

3 ответа3

4

использование

Ctrl-Z

приостановить приложение и вернуться в командную строку. Тогда используйте

bg

чтобы процесс продолжался в фоновом режиме. Наконец использовать

disown

Так что процесс не будет закрыт, когда вы отключите сеанс и закроете свой терминал.

Процесс будет продолжаться, но нет способа «подключиться» к терминалу, чтобы просмотреть выходные данные, о которых я знаю, если вы переподключитесь к новому сеансу.

4

Это как раз тот случай, когда man 1 reptyr прямо упоминает:

reptyr - это утилита, которая берет существующую работающую программу и подключает ее к новому терминалу. Запустил длительный процесс через ssh, но должен уйти и не хочет его прерывать? Просто запустите screen , используйте reptyr чтобы захватить его, а затем завершите сеанс ssh и идите домой.

Не пропустите эту заметку:

reptyr зависит от системного вызова ptrace(2) для подключения к удаленной программе. В Ubuntu Maverick и выше эта возможность отключена по умолчанию из соображений безопасности. Вы можете включить его временно, выполнив

echo 0 > /proc/sys/kernel/yama/ptrace_scope

от имени root или навсегда, отредактировав файл /etc/sysctl.d/10-ptrace.conf , в котором также содержится дополнительная информация об этом параметре.

Также обратите внимание, что reptyr только присоединяет процесс к другому терминалу. Это не означает, что процесс становится дочерним элементом новой оболочки.

Основное использование простое:

reptyr PID

где PID - это PID процесса, который вы хотите подключить к новому терминалу.

2

Вы можете полностью отменить команду (в bash или zsh , возможно, в других оболочках) с помощью команды disown . Однако команда может быть недовольна этим, если ей требуется tty, и в этом случае смотрите ответ reptyr .

$ ssh somecentos7system
-bash-4.2$ sleep 252727
^Z
[1]+  Stopped                 sleep 252727
-bash-4.2$ bg
[1]+ sleep 252727 &
-bash-4.2$ disown
-bash-4.2$ logout
Connection to somecentos7system closed.
$ ssh somecentos7system
-bash-4.2$ pgrep -lf 252727
20089 sleep
-bash-4.2$ 

Другой вариант - автоматически запустить сеанс экрана (или tmux), чтобы вы не могли забыть запустить его, потому что он уже был запущен для вас, потому что вы все настроили таким образом. В других местах есть другие сообщения о том, как это сделать.

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