Script que executa programa cobol via ssh

1. Script que executa programa cobol via ssh

ronaldo souza
ronaldojr1

(usa CentOS)

Enviado em 26/10/2012 - 12:00h

Bom dia a todos

estou precisando que o servidor A acesse o Servidor B e roda um programa do Cobol.

fiz um script de teste direto no servidor B e o mesmo executa com perfeição, mas quando eu tento fazer o script Rodar no Servidor A Para Acessar o Servidor B da erro de arquivo não encontrado.
Obs.: eu ja fiz o esquema para que o servidor A acesse o servidor B sem senha.

Segue o script

#!/bin/bash
#Executa Atualização de clientes

ssh 192.168.1.1
cd /cadastro
runcbl slc204
exit
#fim

O que eu estou fazendo errado?


  


2. Re: Script que executa programa cobol via ssh

Paulo
paulo1205

(usa Ubuntu)

Enviado em 26/10/2012 - 12:47h

Quando você passa diretamente um comando para o ssh, alguns scripts de inicialzação do shell não são executados (leia a manpage do seu shell, e você verá que alguns arquivos só são executados por shells interativos, e outros apenas se for um shell de login).

Provavelmente a definição da variável PATH só está nos arquivos executados no momento do login ou naqueles de shell interativo -- que é, aliás, como eu acho que tem mesmo de ser, para não gerar overhead ou efeitos indesejáveis, por exemplo, na execução de scripts.

A melhor maneira de você contornar o problema, na minha opinião, é colocar a chamada ao Cobol e ao seu aplicativo dentro de um script que executa na máquina invocada via ssh, e esse script se encarregar de definir os valores adequados das variáveis de ambiente antes de chamar o Cobol.

Outro detalhe é o seguinte: se o programa em Cobol precisar de um terminal, você precisará da opção "-t" na linha de comando do SSH. Caso contrário, o comportamento do ssh quando se passa um comando a ser executado remotamente é não alocar terminal (para facilitar o redirecionamento de entrada e saída), mas a falta de um terminal pode fazer com que os programas que precisem de um se recusem a executar.


3. Re: Script que executa programa cobol via ssh

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 26/10/2012 - 18:19h

A explicação do Paulo está bacana.

Você poderia fazer da seguinte forma:


#!/bin/bash

#Executa Atualização de clientes
ssh 192.168.1.1 "cd /cadastro && \

runcbl slc204;

if [ $? -eq 0 ]; then

echo "Execução com sucesso"

else

echo "Falha na execução"

fi



Não fiz teste aqui, pois estou sem terminal pra usar. Mas veja se da certo!


4. Re: Script que executa programa cobol via ssh

Paulo
paulo1205

(usa Ubuntu)

Enviado em 26/10/2012 - 19:48h

Xi! Eu não tinha reaparado que você nem sequer colocou o comando de invocação do Cobol na mesma linha que o ssh. Desse modo, é claro que não vai funcionar, pois ele ficou para ser executado no lado do cliente.

Nesse caso, a primeira coisa que você deve fazer é transformar seu script para fazer com que a execução se dê na máquina remota.

#!/bin/bash -

# Executa Atualização de clientes na máquina remota.
exec ssh -t 192.168.1.1 sh -c \''cd /cadastro && runcbl slc204'\'
# ^ ^ ^ ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
# | | | | |
# | | | | +-- comando a ser executado remotamente
# | | | +-- endereço da máquina remota
# | | +-- opção que forca a alocação de um terminal
# | +-- invocação do cliente ssh
# +-- chamo o ssh atraves de exec porque é o único propósito do script,
# de modo a economizar um processo e ter o código de retorno do ssh
# devolvido diretamente a que tiver chamado o script.

#fim


Como você pode ver, o script acabou se tornando um único comando. Talvez você até ache conveniente transformá-lo em um alias (sem a palavra-chave exec, obviamente).


Se isso não for suficiente, pode ser que o problema seja uma das coisas que eu comentei antes. Nesse caso, você deveria criar um script no servidor para se encarregar de preparar o ambiente para a execução do Cobol e, depois de estar tudo certo nesse ambiente, chamar propriamente o Cobol. No lado do cliente, o script só teria de ser alterado para invocar o script criado, em lugar do sh -c ... que eu mostrei acima.

Um exemplo de script no lado so servidor seria o seguinte.

#!/bin/bash -

# Valores sentados de variável PATH e da máscara de criação de arquivos são
# importantes para a segurança. Todo script deveria preocupar-se com isso.
export PATH=/bin:/usr/bin:/diretorio/de/instalacao/do/cobol
umask 022

# Ajusta outras variávels, se necessário (o exemplo abaixo é puramente
# hipotético -- certamente não faz sentido).
export COBOL_ENVIRONMENT="um valor qualquer"

# Como o diretorio do Cobol foi adicionado a PATH, o runcbl provavelmente
# estará visível para este shell.
cd /cadastro
exec runcbl slc204



5. Re: Script que executa programa cobol via ssh

ronaldo souza
ronaldojr1

(usa CentOS)

Enviado em 29/10/2012 - 13:40h

Obrigado pela ajuda, mas ta dando o seguinte erro: runcbl command not found

Tentei de todos os jeitos postados por vcs e todos deram o mesmo erro.

Tentei fazer o seguinte tb, fiz um script no outro servidor pra rodar o comando(funciona). Depois utilizei esse mesmo script pra rodar o outro script. e adiviha... deu o mesmo erro(runcbl command not found)

o scrpit por equanto ta assim:

#!/bin/bash

export PATH=/bin:/usr/local/cobol/812/bin
umask 022

exec ssh -t 192.168.1.190 sh -c \''cd /cadastro && runcbl scl204 '\'


6. Re: Script que executa programa cobol via ssh

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 29/10/2012 - 14:25h

Tente usar a Path da instalação do Cobol na propria linha de comando:

exec ssh -t 192.168.1.190 "cd /cadastro && /usr/local/cobol/812/bin/runcbl scl204"


7. Re: Script que executa programa cobol via ssh

ronaldo souza
ronaldojr1

(usa CentOS)

Enviado em 29/10/2012 - 14:43h

Perfeito. agora funcionou.

eu sou novo aqui no forum e nao sei onde ta o botao pra finalizar o topico. Vc pode falar onde é?

Grato pela ajuda


8. Duvida

Delfim
deltavivo

(usa Outra)

Enviado em 29/10/2012 - 17:20h

Aproveitando a duvida sobre como rodar o programa Cobol remotamente...

Alguém poderia me auxiliar sobre como devo fazer para ter um retorno se o script (no meu caso) foi rodado com sucesso ou nao?!

Muito obrigado!


9. Retorno do script

Delfim
deltavivo

(usa Outra)

Enviado em 29/10/2012 - 17:51h

Olá pessoal!

Consegui da seguinte forma:

Maq01 - Script01

mkdir /tmp/XXX && echo "Sucesso !!!" && exit 0
[ $? -eq 0 ] || echo "Falha !!!" && exit 1



Maq02 - Script02

exec ssh -t user@Maq01 -p 4074 "cd /tmp && sh Script01.sh"


Pre-requisito
Estabelecer relacao de confianca entre as maquinas.

Rodei o Script02 na Maq02 e me retornou o que aconteceu no Script01. Massa!

Não entendi muito bem, porém o retorno do primeiro script consegue chegar até a outra máquina!
Muito obrigado!


10. Re: Script que executa programa cobol via ssh

cr0n
_di0

(usa FreeBSD)

Enviado em 29/10/2012 - 18:32h

Devido ao comando exec, o qual traz um cenário de overlaying, sem criar um novo processo, toma-se o controle momentaneamente, substituindo o shell com um determinado programa.


11. Re: Script que executa programa cobol via ssh

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 29/10/2012 - 19:12h

deltavivo escreveu:

Olá pessoal!

Consegui da seguinte forma:

Maq01 - Script01

mkdir /tmp/XXX && echo "Sucesso !!!" && exit 0
[ $? -eq 0 ] || echo "Falha !!!" && exit 1


Para validar um comando vc deve perguntar ao shell desta forma: "$?"

Vamos pegar o seu exemplo e colocá-lo no padrão de validação:


mkdir /tmp/XXX
if [ $? -eq 0 ]; then

echo "Diretorio criado com sucesso"
exit 0

else

echo "Problemas ao criar o diretorio /tmp/XXX"
exit 1

fi


Há outras formas, pois o universo Shell é imenso de possibilidade, mas esta é uma maneira fácil de entender!


12. Obrigado!

Delfim
deltavivo

(usa Outra)

Enviado em 29/10/2012 - 19:34h


_di0, obrigado pela explicação! Tenho muito a aprender!

alexandregms, realmente. Da forma que você expos fica bem mais simples de entender.

Obrigado a todos!



  
01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts