3

Это все еще блокирует:

ssh host nohup cmd

Это все еще оставляет соединение открытым:

ssh host nohup cmd &

4 ответа4

1

Попробуй это:

ssh host batch cmd
1

& В вашем примере отключит команду ssh, но не вашу удаленную программу.

Это похоже на работу:

удаленный хост ssh 'tail -f /var /log /syslog &' &

ssh remote-host 'tail -f /var/log/syslog > /dev/null &' &

Первый & отсоединит команду для удаленного хоста, а второй & отсоединит саму команду ssh

В моем примере команда tail все еще выполняется после того, как я закрыл соединение.


редактировать это, похоже, не работает, так как tail завершается вскоре после того, как соединение фактически закрыто.

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

edit 2 отлично работает при перенаправлении команды tail в /dev /null ^ _ ^

Просто будьте осторожны и не пишите в stderr / stdout, или перенаправляйте вывод в локальный пункт назначения

0

Следующее будет работать:

ssh myhost " nohup ./r.sh & " & sleep 2 ; kill -9 $! && echo

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

0

Эта проблема, видимо, давно существует (даже дольше, чем ваш вопрос!). Решение состоит в том, чтобы перенаправить stdout и stderr. Пример учебника таков:

ssh server 'sleep 20 & exit'

который висит на 20 секунд. Используя bash, вы можете переписать его так:

ssh server 'sleep 20 >/dev/null 2>&1 & exit'

который решает проблему. Для tcsh вы бы использовали что-то вроде:

ssh server '(sleep 20 >/dev/null) >& /dev/null & exit'

Рекомендации

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