Intereting Posts
mount: / не установлен или плохой вариант Можете ли вы добавить записи в fstab с графическим интерфейсом в ubuntu? Шифрование тома Linux: можно указать собственный инструмент шифрования? Как ядро ​​позволяет процессу получать сетевые данные, которые ему не принадлежат? Нечетное поведение GUI программного обеспечения в Ubuntu на основе eOS (источники, выбранные в фоновом режиме) Оценить математическое выражение в cron Как копировать и вставлять строки между ключевым словом start и end? Не могу понять результат чкротткита Какова команда поиска файла jar в определенной папке? Невозможно отключить горячую точку оболочки GNOME / горячий угол / «Функция», Где / Как установить CentOS 7 для 32-битной системы? Почему curl дает мне html вместо файла? ip-таблицы по команде route и таблица iptables командой iptables, то же самое? Использование lua rock, установленного с luarocks pip не использует прокси-сервер, установленный средой

Как копировать, выполнять и извлекать данные с удаленного компьютера?

Я пытаюсь выполнить некоторые вычисления на удаленном компьютере. В основном я хочу скопировать некоторые файлы на компьютер, загрузить программное обеспечение, выполнить расчет, а затем вернуть данные обратно. Для этого я создал соединение без пароля. Ниже приведена моя попытка:

#!/bin/bash scp ./* username@host:/home/tmp work=$pwd ssh username@host cd /home/tmp module purge module load gcc/4.6.0 icc/11.1.075 ifort/11.1.075 compilers-extra mpi-openmpi/1.4.3-icc-11.1 vasp mpirun -np 20 vasp > out.vasp 2>&1 & scp ./* username@headnode:$work 

Сценарий просто копирует файлы и регистрируется на удаленном компьютере, но никаких вычислений не инициируется.

Я не совсем уверен, в чем ваш вопрос, но у меня есть два замечания, которые слишком долго для комментария:

  1. Ваш текущий скрипт остановится после входа в систему на host (в строке 4) и будет ждать, когда вы сделаете что-то интерактивно – только когда вы выйдете, скрипт продолжит (что, вероятно, не так, как вы хотите).

    Поэтому ставьте все, что должно быть выполнено на удаленном сервере, в автономный сценарий оболочки, scp его там с остальными данными и запускать его с помощью ssh username@host /path/to/my/script .

    Таким образом:

 #!/bin/bash # your local script scp ./inputs* ./do_stuff.sh username@host:/home/tmp ssh username@host /home/tmp/do_stuff.sh scp username@host:/home/tmp/outputs* . #!/bin/bash # script for remote execution do_stuff.sh cd /home/tmp module purge module load gcc/4.6.0 icc/11.1.075 ifort/11.1.075 compilers-extra mpi-openmpi/1.4.3-icc-11.1 vasp mpirun -np 20 vasp > out.vasp 2>&1 

замените inputs* / outputs* что вам нужно скопировать в / из кластера – вы, вероятно, не хотите копировать обратно входы. Обратите внимание, что скрипт, на который ссылается как do_stuff.sh должен быть помечен как исполняемый файл. Если даже это не сработает (поскольку файловая система, с которой вы копируете ее, монтируется с параметром noexec , используйте ssh username@host bash /home/tmp/do_stuff.sh или вы можете просто ssh username@host bash /home/tmp/do_stuff.sh ее на удаленную машину:

 cat do_stuff.sh | ssh username@host bash - 

2) Если вы используете это на headnode (как вам кажется), вы можете избавиться от одного направления соединения scp снова запустив scp на headnode .

Я бы предположил, что у вас есть свой сценарий в вашем доме для удаленного выполнения, а затем вызывается ваш сценарий,

 ssh user@host 'bash -s' < local_script.sh 

В принципе, из вашего скрипта с доступом без пароля, после ssh username@host , сценарий не выполняется. Это может быть легко протестировано.

тестирование

Имейте эти 2 строки в сценарии и попробуйте запустить скрипт с вашей локальной машины.

 ssh username@host hostname 

Обычно мы ожидаем, что он напечатает имя удаленной машины, так как мы ssh'ed к нему. Но это не тот случай. Он просто входит в систему на удаленном компьютере, и когда вы exit из удаленного компьютера, тогда он будет печатать имя хоста ( обязательно проверьте, какое имя хоста оно распечатывает, оно будет печатать имя хоста локальной машины ).

Теперь, как я предположил, если у вас есть сценарий в вашем местном доме и назовите его,

 ssh user@host 'bash -s' < local_script.sh 

Результатом в этом случае является имя удаленного хост-компьютера ( обязательно удалите строку ssh из скрипта, поскольку это бесполезно сейчас ).

В основном вы ожидаете, что ваш скрипт продолжит работу на удаленной машине, чего не произойдет, они будут работать на вашей локальной машине. Чтобы достичь желаемого, вам необходимо передать серию команд удаленной машине через ssh.

Вы можете прочитать это руководство, чтобы получить эту идею: http://www.shellhacks.com/en/Running-Commands-on-a-Remote-Linux-Server-over-SSH