Я хочу выполнить скрипт, start.sh
на удаленном сервере, который выполняет это:
nohup node server.js &
Наивно, я называю SSH так:
ssh myserver <<EOF
./start.sh &
EOF
Это запускает сценарий, но оставляет сеанс подключенным. Я хочу выполнить этот шаг с другими командами в сценарии, так что это бесполезно.
Как я могу подключиться к удаленному компьютеру по SSH, запустить команду nohup
в фоновом режиме, а затем отключиться? Я полагаю, что мог бы поставить сам процесс SSH на задний план, но это кажется неправильным.
Вы уже нашли правильный путь, вот документ.
ПРИМЕЧАНИЕ : вы можете поместить ssh (клиент) в фоновый режим, поместив & amp; в конце, но вы не увидите выход. Если вы действительно хотите это сделать, перенаправьте stdout / stderr в файл на тот случай, если вам нужно проверить ответ от удаленного хоста.
blockquote>По сути, вы можете сделать это любым способом:
Непосредственно выполнить команду {, 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 &"
ПРИМЕЧАНИЕ :
blockquote>&&
требует, чтобы первая команда возвращала 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
Почему бы просто не использовать tmux или screen и покончить с этим? Например:
$ tmux new -s SessionNameHere
$ nohup /path/to/your/script.sh
Это практично, если это что-то, что будет непрерывно повторяться или займет некоторое время, чтобы закончить. Вы можете отключиться от сеанса, и он останется активным.
Более короткая форма:
ssh host "(command 1; command 2; ...) &>/dev/null &"
Похоже, что bash сам выполняет отсоединение от терминала, поэтому nohup не требуется. Я запускаю Ubuntu 14.04 x86_64, bash 4.3.11.
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.