Лучший способ - запустить процесс в терминальном мультиплексоре. В качестве альтернативы вы можете заставить процесс не получать сигнал HUP.
Терминальный мультиплексор обеспечивает «виртуальные» терминалы , которые работают независимо от «реального» терминала ( на самом деле все терминалы сегодня «виртуальные» , но это уже другая тема для другого дня). Виртуальный терминал будет продолжать работать, даже если ваш реальный терминал закрыт с вашим сеансом SSH.
Все процессы, запущенные из виртуального терминала, будут продолжать работать с этим виртуальным терминалом. При повторном подключении к серверу вы можете подключиться к виртуальному терминалу, и все будет так, как будто ничего не произошло, кроме прошедшего времени.
Двумя популярными терминальными мультиплексорами являются screen и tmux .
Экран имеет крутой кривой обучения. Вот хороший учебник с диаграммами, объясняющими эту концепцию: http://www.ibm.com/developerworks/aix/library/au-gnu_screen/
Сигнал HUP (или SIGHUP) отправляется терминалом всем его дочерним процессам, когда терминал закрыт. Общее действие после получения SIGHUP - прекратить. Таким образом, когда ваш ssh-сеанс отключается, все ваши процессы завершаются. Чтобы избежать этого, вы можете сделать так, чтобы ваши процессы не получали SIGHUP.
Два простых способа сделать это nohup
и disown
.
Для получения дополнительной информации о том, как nohup
и как disown
работает, прочитайте этот вопрос и ответ: https://unix.stackexchange.com/questions/3886/difference-between-nohup-disown-and
Примечание: хотя процессы будут продолжать работать, вы больше не можете взаимодействовать с ними, потому что они больше не подключены ни к одному терминалу. Этот метод в основном полезен для длительных пакетных процессов, которые после запуска больше не нуждаются в вводе пользователем.
screen
предоставляет гораздо больше возможностей, но если вы используете,authorized_keys
чтобы позволить людям запускать сценарий удаленно с помощьюssh
, этотnohup
параметр является хорошим простым способом для сценария запускать процессы, которые длятся дольше, чемssh
сеанс, используемый для их запуска. ,