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

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

nohup node server.js &

Наивно, я вызываю SSH следующим образом:

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

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

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

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

записка: вы можете перевести ssh (клиент) в фоновый режим, поместив & в конце, но вы не увидите выходных данных. Если вы действительно хотите это сделать, перенаправьте stdout/stderr в файл на случай, если вам нужно проверить ответ с удаленного хоста.

В принципе, вы можете сделать это любым способом:

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

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

операционная

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

записка: && требуется, чтобы первая команда возвращала 0 перед выполнением второй

Используйте здесь документ

ssh user@host << EOFnohup command1 > /dev/null 2>&1 &nohup command2 >> /path/to/command2.log 2>&1 &......EOF

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

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

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.

Почему бы просто не использовать 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.