Запустите команду nohup через SSH, затем отключите

Я хочу выполнить скрипт, start.sh на удаленном сервере, который выполняет это:

nohup node server.js &

Наивно, я называю SSH так:

ssh myserver <<EOF
./start.sh &
EOF

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

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

57
задан 24 September 2013 в 02:53

4 ответа

Вы уже нашли правильный путь, вот документ.

ПРИМЕЧАНИЕ : вы можете поместить ssh (клиент) в фоновый режим, поместив & amp; в конце, но вы не увидите выход. Если вы действительно хотите это сделать, перенаправьте stdout / stderr в файл на тот случай, если вам нужно проверить ответ от удаленного хоста.

По сути, вы можете сделать это любым способом:

Непосредственно выполнить команду {, s}

ssh user@host "nohup command1 > /dev/null 2>&1 &; nohup command2; command3"

ИЛИ

[ 1112] ssh user@host "$(nohup command1 > /dev/null 2>&1 &) && nohup command2 >> /path/to/log 2>&1 &"

ПРИМЕЧАНИЕ : && требует, чтобы первая команда возвращала 0, прежде чем выполнить вторую

Использовать здесь документ [ 116]
ssh user@host << EOF
nohup command1 > /dev/null 2>&1 &
nohup command2 >> /path/to/command2.log 2>&1 &
......
EOF

Вышеупомянутые 3 варианта должны работать для вас.

Кроме того, посмотрите на ответ здесь: https://askubuntu.com/a/348921/70270

0
ответ дан 24 September 2013 в 02:53

Почему бы просто не использовать tmux или screen и покончить с этим? Например:

$ tmux new -s SessionNameHere
$ nohup /path/to/your/script.sh

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

0
ответ дан 24 September 2013 в 02:53

Более короткая форма:

ssh host "(command 1; command 2; ...) &>/dev/null &"

Похоже, что bash сам выполняет отсоединение от терминала, поэтому nohup не требуется. Я запускаю Ubuntu 14.04 x86_64, bash 4.3.11.

0
ответ дан 24 September 2013 в 02:53
ssh node "nohup sleep 10 &"

не работает в режиме демона, сохраняя сеанс связи SSH. Ssh сессия вернется через 10 секунд, несмотря на то, что вы использовали nohup.

Причина в том, что удаленные stdout и stderr все еще подключены к вашему сеансу. Он поддерживает сессию ssh, nohup не помогает.

Это:

ssh node "nohup sleep 10 1>/dev/null 2>/dev/null &"

возвращается немедленно. Он запускает удаленный процесс с nohup и немедленно выходит из сеанса ssh.

0
ответ дан 24 September 2013 в 02:53

Другие вопросы по тегам:

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