Como copiar, executar e recuperar dados de um computador remoto? ______ qstntxt ___

Estou tentando executar alguns cálculos em um computador remoto. Basicamente eu quero copiar alguns arquivos para o computador, carregar um software, executar o cálculo e recuperar os dados. Eu criei uma conexão sem senha já para isso. Abaixo está minha tentativa:

%pre%

O script apenas copia os arquivos e efetua o login no computador remoto, mas nenhum cálculo é iniciado.

    
______ azszpr158431 ___

Não sei bem qual é a sua pergunta, mas tenho duas observações que são muito longas para um comentário:

  1. Seu script atual irá parar quando você logar em %code% (na linha 4) e irá esperar que você faça algo interativamente - somente quando você sair o script prosseguirá (o que provavelmente não é o que você quer). / p>

    Portanto, coloque qualquer coisa que deve ser executada no servidor remoto em um script de shell independente, scp-lo com o resto dos dados e execute-o com %code% .

    Assim:

%pre%

substitua %code% / %code% com o que você precisar copiar para / do cluster - você provavelmente não deseja copiar de volta as entradas. Observe que o script mencionado como %code% precisa ser marcado como executável. Se mesmo isso não funcionar (porque o sistema de arquivos para o qual você está copiando está montado com a opção %code% , use %code% . Ou você pode simplesmente canalizá-lo para a máquina remota:

%pre%

2) Se você estiver executando isso em %code% (o que parece que você é), você pode se livrar de uma direção de conexão scp executando o %code% on %code% novamente.

    
______ azszpr158433 ___

Sugiro que você tenha seu script em sua casa para execução remota e, em seguida, chame seu script como

%pre%

Basicamente, a partir do seu script com acesso sem senha, após %code% , o script não está sendo executado. Isso poderia ser facilmente testado.

Teste

Tenha estas duas linhas em um script e tente executar o script em sua máquina local.

%pre%

Normalmente, estaríamos esperando que ele imprimisse o nome da máquina remota desde que tenhamos ssh. Mas esse não é o caso. Ele apenas efetua login na máquina remota e, quando você %code% sai da máquina remota, somente ele imprimirá o nome do host ( Certifique-se de verificar o nome do host que está sendo impresso, seria imprimir o local nome do host da máquina ).

Agora, como sugeri, se você tiver seu roteiro em sua casa local e chamá-lo como

%pre%

A saída, neste caso, é o nome da máquina host remota ( Certifique-se de remover a linha ssh do script, pois isso é inútil agora ).

    
______ azszpr158430 ___

Basicamente, você espera que seu script continue na máquina remota, o que não acontecerá, eles serão executados em sua máquina local. Para conseguir o que você quer, você precisará passar a série de comandos para a máquina remota através do ssh.

Você pode ler este guia para ter uma ideia: link

    
___

3

Estou tentando executar alguns cálculos em um computador remoto. Basicamente eu quero copiar alguns arquivos para o computador, carregar um software, executar o cálculo e recuperar os dados. Eu criei uma conexão sem senha já para isso. Abaixo está minha tentativa:

#!/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

O script apenas copia os arquivos e efetua o login no computador remoto, mas nenhum cálculo é iniciado.

    
por hat 30.09.2014 / 16:19

3 respostas

2

Não sei bem qual é a sua pergunta, mas tenho duas observações que são muito longas para um comentário:

  1. Seu script atual irá parar quando você logar em host (na linha 4) e irá esperar que você faça algo interativamente - somente quando você sair o script prosseguirá (o que provavelmente não é o que você quer). / p>

    Portanto, coloque qualquer coisa que deve ser executada no servidor remoto em um script de shell independente, scp-lo com o resto dos dados e execute-o com ssh username@host /path/to/my/script .

    Assim:

#!/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

substitua inputs* / outputs* com o que você precisar copiar para / do cluster - você provavelmente não deseja copiar de volta as entradas. Observe que o script mencionado como do_stuff.sh precisa ser marcado como executável. Se mesmo isso não funcionar (porque o sistema de arquivos para o qual você está copiando está montado com a opção noexec , use ssh username@host bash /home/tmp/do_stuff.sh . Ou você pode simplesmente canalizá-lo para a máquina remota:

cat do_stuff.sh | ssh username@host bash -

2) Se você estiver executando isso em headnode (o que parece que você é), você pode se livrar de uma direção de conexão scp executando o scp on headnode novamente.

    
por 30.09.2014 / 16:28
1

Sugiro que você tenha seu script em sua casa para execução remota e, em seguida, chame seu script como

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

Basicamente, a partir do seu script com acesso sem senha, após ssh username@host , o script não está sendo executado. Isso poderia ser facilmente testado.

Teste

Tenha estas duas linhas em um script e tente executar o script em sua máquina local.

ssh username@host
hostname

Normalmente, estaríamos esperando que ele imprimisse o nome da máquina remota desde que tenhamos ssh. Mas esse não é o caso. Ele apenas efetua login na máquina remota e, quando você exit sai da máquina remota, somente ele imprimirá o nome do host ( Certifique-se de verificar o nome do host que está sendo impresso, seria imprimir o local nome do host da máquina ).

Agora, como sugeri, se você tiver seu roteiro em sua casa local e chamá-lo como

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

A saída, neste caso, é o nome da máquina host remota ( Certifique-se de remover a linha ssh do script, pois isso é inútil agora ).

    
por 30.09.2014 / 16:30
0

Basicamente, você espera que seu script continue na máquina remota, o que não acontecerá, eles serão executados em sua máquina local. Para conseguir o que você quer, você precisará passar a série de comandos para a máquina remota através do ssh.

Você pode ler este guia para ter uma ideia: link

    
por 30.09.2014 / 16:28