Это все еще блокирует:
ssh host nohup cmd
Это все еще оставляет соединение открытым:
ssh host nohup cmd &
Попробуй это:
ssh host batch cmd
&
В вашем примере отключит команду 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, или перенаправляйте вывод в локальный пункт назначения
Следующее будет работать:
ssh myhost " nohup ./r.sh & " & sleep 2 ; kill -9 $! && echo
(по крайней мере, если у вас нет запроса на ввод пароля). В случае, если вы есть, я не вижу простой способ сделать это.
Эта проблема, видимо, давно существует (даже дольше, чем ваш вопрос!). Решение состоит в том, чтобы перенаправить 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'
Рекомендации