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

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

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

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

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

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

3
задан 20.03.2017, 12:04

2 ответа

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

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

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

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

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

disown мой обычный метод, я не должен помнить смешивать с потоками вывода как nohup требует.

6
ответ дан 07.12.2019, 23:17

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

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

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

2
ответ дан 07.12.2019, 23:17

Теги

Похожие вопросы