Запустить постоянный процесс через ssh - программирование
Подтвердить что ты не робот

Запустить постоянный процесс через ssh

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

Если вы используете 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