Запустите постоянный процесс через ssh - PullRequest
16 голосов
/ 11 февраля 2012

Я пытаюсь запустить тестовый сервер через ssh, но он всегда умирает, когда я отключаюсь от ssh.

Есть ли способ запустить процесс (запустить сервер), чтобы он не умер по окончании моей сессии ssh?

Ответы [ 5 ]

19 голосов
/ 11 февраля 2012

В качестве альтернативы nohup вы можете запускать удаленное приложение в терминальном мультиплексоре, например GNU screen или tmux.

Использование этих инструментов облегчает повторное подключение к сеансу с другого хоста, а это означает, что вы можете запустить длительную сборку или загрузку до того, как уйдете с работы, и проверить ее состояние, когда вернетесь домой. Например. Я нахожу это особенно полезным, когда выполняю разработку на очень удаленных (в другой стране) серверах с ненадежным соединением между мной и ними. Если соединение обрывается, я могу просто переподключиться и продолжить работу, не теряя никакого состояния.

4 голосов
/ 11 февраля 2012

В дополнение к другим ответам вы можете запустить свой тестовый сервер через пакет (или at), но как Брайан ответил , вам следует позвонить daemon

И вы можете передать -f опцию ssh

4 голосов
/ 11 февраля 2012

Да;вы можете использовать команду nohup , чтобы проглотить сигнал HUP («зависание»), который отправляется вашей программе, когда вы вешаете сеанс SSH.

В качестве альтернативы, если вынаписав сервер самостоятельно, вы можете закодировать его в , зарегистрировать обработчик для сигнала HUP и проглотить его внутри программы (вместо использования внешней программы nohup, которая делает то же самое).

3 голосов
/ 23 июня 2017

Если вы используете SSH для дистрибутива Linux с systemd, вы можете использовать systemd-run для запуска процесса в фоновом режиме (в терминах systemd - «временный сервис»). Например, если вы хотите пропинговать что-то в фоновом режиме:

systemd-run --unit=pinger ping 10.8.178.3

Преимущество, которое вы получите с systemd от простого запуска процесса с nohup, заключается в том, что systemd будет отслеживать процесс и его дочерние элементы, вести журналы, запоминать код завершения и позволять вам аккуратно завершать процесс и все его дочерние элементы , Примеры:

Просмотр состояния и последних строк вывода:

systemctl status pinger

Потоковый вывод:

journalctl -xfu pinger

Убить:

systemctl kill pinger
3 голосов
/ 11 февраля 2012

В качестве альтернативы nohup, screen и др. Вы можете изменить свой сервер, чтобы вызвать daemon, чтобы отсоединить его от терминала. Это идиоматический способ написания сервисов для linux.

См. Также daemon(3).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...