1

У меня есть эта интересная проблема, где я хотел бы запустить эту команду

nc -l 8023 | zfs receive tank3/pro1

на удаленном хосте 10.10.10.11 .

Если я бегу

ssh -n 10.10.10.11 'nohup nc -l 8023 | zfs receive tank3/pro1 &'

изнутри скрипта он не продолжается в скрипте, потому что zfs ожидает STDIN.

Если я перенаправить STDIN, STDOUT, STDERR

ssh -n 10.10.10.11 'nohup nc -l 8023 | zfs receive tank3/pro1 &> /dev/null < /dev/null &'

затем сценарий продолжается, но перенаправление STDIN уничтожает команду zfs .

Вопрос

Можно ли использовать screen для решения этой проблемы?

Или другие идеи?

3 ответа3

2

Вы можете попробовать следующий пример:

ssh -t root@server1 screen "tail -f /var/log/messages"

-t Force псевдо-tty выделения. Это может быть использовано для выполнения произвольных программ на экране на удаленной машине, что может быть очень полезно

0

Вы действительно можете использовать screen для этого, с -d -m для запуска в отдельном режиме:

ssh 10.10.10.11 screen -d -m 'nc -l 8023 | zfs receive tank3/pro1'
0

У меня нет ZFS, но я сделал простой скрипт для имитации чтения stdin. Кажется, работает на меня

~/ Песок / readme.sh:

#!/bin/sh
while read X
do
   echo $X
done

А потом:

ssh localhost "nc -l 8023 | ~/sand/readme.sh &\\disown"

Или в одинарных кавычках:

ssh localhost 'nc -l 8023 | ~/sand/readme.sh &\disown'

\ разделяет несколько удаленных ssh-команд, или, по крайней мере, мне кажется, что они так себя ведут :). disown позволит вам оторваться от неэффективной работы. Я использую это всякий раз, когда запускаю длинную команду и осознаю только после того, как должен был сделать это на экране. CTRL+Z; bg; disown если вы когда-нибудь окажетесь в этом сценарии. Вы можете выйти из SSH, и он продолжит работать в фоновом режиме.

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