Я пытаюсь запустить тестовый сервер через ssh, но он всегда умирает, когда я отключусь от ssh.
Есть ли способ запустить процесс (запустить сервер), чтобы он не умер в конце моей сессии ssh?
Я пытаюсь запустить тестовый сервер через ssh, но он всегда умирает, когда я отключусь от ssh.
Есть ли способ запустить процесс (запустить сервер), чтобы он не умер в конце моей сессии ssh?
В качестве альтернативы nohup
вы можете запустить свое удаленное приложение внутри терминального мультиплексора, например GNU screen
или tmux
.
Использование этих инструментов упрощает повторное подключение к сеансу с другого хоста, а это значит, что вы можете вытащить длинную сборку или загрузить ее, прежде чем покидать работу и проверить ее статус при возвращении домой. Например. Я считаю это особенно полезным при выполнении работ по разработке на очень удаленных (в другой стране) серверах с ненадежной связью между мной и ними, если соединение падает, я могу просто повторно подключиться и продолжить, не теряя при этом никакого состояния.
Да; вы можете использовать команду nohup
, чтобы усвоить сигнал HUP ( "hangup" ), который отправляется в вашу программу, когда вы вешаете свой сеанс SSH.
В качестве альтернативы, если вы пишете сервер самостоятельно, вы можете его скопировать в зарегистрировать обработчик для сигнала HUP и усвоить его внутри (вместо использования внешней программы nohup
, которая делает то же самое).
В дополнение к другим ответам вы можете запустить тестовый сервер через batch (или at
), но как Брайан ответил, вы должны называть daemon
И вы можете передать опцию -f
в ssh
В качестве альтернативы nohup
, screen
и др. вы можете пересмотреть свой сервер, чтобы вызвать daemon
, чтобы отсоединить его от терминала. Это идиоматический способ писать службы для Linux.
См. также daemon(3)
.
Если вы используете 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