3

Возможные дубликаты:
Как сохранить работоспособность программы после отключения ssh.
Как я могу использовать ssh для запуска команды на удаленной машине Unix и выхода до ее завершения?

Я использую сервер Монго на рабочей машине. Я получаю к нему доступ через консоль ssh. Если я запускаю сервер Монго, он работает на переднем плане. Если я закрою окно SSH на моем клиенте, процесс Монго умирает на сервере.

Даже если я запускаю его как "mongod &" в фоновом режиме, он все равно умирает, если соединение потеряно.

Как правильно запустить этот демон, чтобы он не зависел от активного сеанса SSH?

редактировать: используя консоль Ubuntu 10 в качестве сервера

2 ответа2

6

Когда вы закрываете оболочку, она отправляет сигнал SIGHUP на все задания, которые она порождает. По умолчанию SIGHUP завершит любой процесс.

Если вы знаете, что вам нужно «поддерживать работу», когда вы запускаете процесс, вы можете использовать nohup для запуска процесса. Как побочный эффект, он перенаправит stdout и stderr в файл nohup.out, если эти потоки будут указывать на терминал. Вы можете перенаправить их самостоятельно, если не хотите этот файл.

Вы также можете запустить его с помощью setsid , который создает новую группу процессов. Ваша оболочка больше не будет отправлять SIGHUP, поскольку она не входит в группу процессов оболочки.

Если вы уже запустили свою программу, и вы используете bash или zsh (очень вероятно, в Linux), вы можете использовать disown .

Либо запустите команду с & для принудительной установки фона, либо, как правило, введите Ctrl-Z, чтобы приостановить ее, затем bg %1 (при условии, что это задание № 1), чтобы вывести ее из приостановки и запустить как фоновый процесс. Затем вы disown %1 чтобы заставить bash/zsh забыть об этом.

disown - мой обычный метод, мне не нужно помнить, чтобы связываться с выходными потоками, как этого требует nohup .

2

Попробуйте использовать nohup mongod & . Это предотвратит получение программой сигналов SIGHUP, которые отправляются при выходе из оболочки (после потери соединения). Это стандартная оболочка, встроенная во все оболочки.

Вы также можете использовать setsid mongod & который отсоединит программу от терминала, поэтому при выходе из оболочки сигнал SIGHUP не отправляется. (Другие вещи также случаются, но это основной побочный эффект.) Сетсид не является стандартным во всех оболочках, но он есть в bash на Ubuntu 10.

Вы также можете запустить gnu-screen, который продолжит сеанс после потери соединения, что позволит вам снова подключиться и снова взаимодействовать с оболочкой. Состояние программы не изменится, она продолжит работать, пока она отключена.

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