shell script [RESOLVIDO]

1. shell script [RESOLVIDO]

matheus novaes marinho
Novaesma

(usa Outra)

Enviado em 13/10/2020 - 10:59h

Bom dia, Boa tarde, Boa noite!!
Estou com um problema com esse script mas sei o que pode ser.

ele para pegar os arquivos dos dir CHPI, CHPE e CHPG que estão em um servidor e mandar para outro o servidor no dir TEMP.... mas não acontece nada o cron q tem pra ele ta certo então imagino que seja no script mesmo.


#!/bin/bash

yy=$(date +%Y)
INICIO=`date +%d/%m/%Y-%H:%M:%S`

###LOG para controle de entrada e saída do acesso remoto

LOG=./reg-log.txt
echo "|--------------------------------------------" >> $LOG
echo "Sincronização iniciada" >> $LOG

##copia dos arquivos do SFA2 e coloca no dir TEMP

scp /home/saai/Catalogo/CHPE/$yy/* [email protected]:/home/Teste/Config/TEMP/

scp /home/saai/Catalogo/CHPI/$yy/* [email protected]:/home/Teste/Config/TEMP/

scp /home/saai/Catalogo/CHPG/$yy/* [email protected]:/home/Teste/Config/TEMP/

##fecha o cesso remoto

FINAL=`date +%d/%m/%Y-%H:%M:%S`
echo "Sincronização Finalizada" >> $LOG
echo "|--------------------------------------------" >> $LOG



  


2. Re: shell script [RESOLVIDO]

Daniel Lara Souza
danniel-lara

(usa Fedora)

Enviado em 13/10/2020 - 15:05h


se tu rodar o script manualmente ele funciona ?
o que não funciona é po agendamento pelo cron é isso ?



3. Re: shell script [RESOLVIDO]

matheus novaes marinho
Novaesma

(usa Outra)

Enviado em 14/10/2020 - 09:21h

danniel-lara escreveu:


se tu rodar o script manualmente ele funciona ?
o que não funciona é po agendamento pelo cron é isso ?


nem o agendamento do cron e nem manualmente esta indo, ai pensei q poida ser algo no script mesmo.

o cron esta assim
#############################################Distribuidor#######################################

##bkc_envia.sh
*/15 * * * * /home/saai/Scripts/RMEdistribu/bkc_envia.sh
##



4. Re: shell script [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 14/10/2020 - 09:41h

O cron gera logs. O que aparece nos logs?

E o que aprece quando você roda o script na mão? Já tentou rodar o script ativando opções de depuração do shell (por exemplo: "-v" e "-x")? O que essas opções, quando usadas, dão de dicas a mais a você?


Erros comuns que podem afetar o funcionamento de scripts:

  • Editar o script em máquina Windows: como o Windows usa uma convenção diferente de indicação do fim de linha (dois caracteres de controle, CR (código ASCII 13) e LF (código ASCII 10), em vez de um só, LF, como no mundo UNIX), o primeiro dos caracteres de controle do Windows (CR) pode estar sendo interpretado como parte dos comandos ou dos nomes dos arquivos quando o script é executado no Linux.

  • Variáveis de ambiente (tais como PATH, LANG, SHELL, HOME e outras) com valores diferentes dos que normalmente são usados numa sessão interativa, provocando comportamentos diferentes de um ou mais dos programas que são executados pelo script.

  • Parâmetros diferentes do sistema operacional no momento de execução do script (especialmente via cron), em comparação com os de uma sessão interativa. Entre tais parâmetros podem estar a execução com usuário ou grupos diferentes, umask utilizado para acesso aos aqruivos, diversos limites atribuídos aos processos e à sessão, incluindo quantidade máxima de memória disponível para uso, número máximo de arquivos que podem ser abertos, tamanho máximo da pilha, entre outros, ou ainda contextos do SELinux ou de outros mecanismos de segurança.

... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)


5. Re: shell script [RESOLVIDO]

matheus novaes marinho
Novaesma

(usa Outra)

Enviado em 14/10/2020 - 10:09h

paulo1205 escreveu:

O cron gera logs. O que aparece nos logs?

E o que aprece quando você roda o script na mão? Já tentou rodar o script ativando opções de depuração do shell (por exemplo: "-v" e "-x")? O que essas opções, quando usadas, dão de dicas a mais a você?


Erros comuns que podem afetar o funcionamento de scripts:

  • Editar o script em máquina Windows: como o Windows usa uma convenção diferente de indicação do fim de linha (dois caracteres de controle, CR (código ASCII 13) e LF (código ASCII 10), em vez de um só, LF, como no mundo UNIX), o primeiro dos caracteres de controle do Windows (CR) pode estar sendo interpretado como parte dos comandos ou dos nomes dos arquivos quando o script é executado no Linux.

  • Variáveis de ambiente (tais como PATH, LANG, SHELL, HOME e outras) com valores diferentes dos que normalmente são usados numa sessão interativa, provocando comportamentos diferentes de um ou mais dos programas que são executados pelo script.

  • Parâmetros diferentes do sistema operacional no momento de execução do script (especialmente via cron), em comparação com os de uma sessão interativa. Entre tais parâmetros podem estar a execução com usuário ou grupos diferentes, umask utilizado para acesso aos aqruivos, diversos limites atribuídos aos processos e à sessão, incluindo quantidade máxima de memória disponível para uso, número máximo de arquivos que podem ser abertos, tamanho máximo da pilha, entre outros, ou ainda contextos do SELinux ou de outros mecanismos de segurança.

... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)


quando rodo ele na manualmente da isso

[email protected](ip)'s password:
/home/saai/Catalogo/CHPE/2020/Wed: No such file or directory
Oct: No such file or directory
14: No such file or directory
ssh: connect to host 12 port 22: Invalid argument
UTC: No such file or directory
2020/*: No such file or directory



6. Re: shell script [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 14/10/2020 - 11:17h

Coloque os nomes dos arquivo de origem entre aspas. Quando a variável é expandida, os espaços no texto dela estão sendo interpretados como separadores entre os argumentos. Usando aspas, os espaços ficam sendo parte de um único argumento.


... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)


7. Re: shell script [RESOLVIDO]

matheus novaes marinho
Novaesma

(usa Outra)

Enviado em 14/10/2020 - 11:24h

paulo1205 escreveu:

Coloque os nomes dos arquivo de origem entre aspas. Quando a variável é expandida, os espaços no texto dela estão sendo interpretados como separadores entre os argumentos. Usando aspas, os espaços ficam sendo parte de um único argumento.


... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)


desculpa n entendi!
mas no script n tem o nome dos arquivos.... ele so vai copiar tudo que ta dentro dos dir e manda para outra maquina


8. Re: shell script

Paulo
paulo1205

(usa Ubuntu)

Enviado em 14/10/2020 - 12:28h

Novaesma escreveu:

quando rodo ele na manualmente da isso

[email protected](ip)'s password:
/home/saai/Catalogo/CHPE/2020/Wed: No such file or directory
Oct: No such file or directory
14: No such file or directory
ssh: connect to host 12 port 22: Invalid argument
UTC: No such file or directory
2020/*: No such file or directory


Essas mensagens sugerem que você tentou executar alguma coisa envolvendo um nome de arquivo(s) na forma "/home/saai/Catalogo/CHPE/2020/Wed Oct 14 11:12:22 UTC 2020/*". Cada um desses espaços está funcionando como um separador entre argumentos.

De onde veio essa data, e com esse formato? Aparentemente deve ter vindo de uma substituição de variável.

Você nunca deve usar um script algo como
cp /home/$variavel/arquivo $destino 
, porque você frequentemente não consegue saber de antemão se todos os caracteres que formam o conteúdo da variável são seguros para uso com o shell (espaços e tabulações, por exemplo, não o são). A forma mais correta de alcançar o resultado esperado é mudar o comando acima para a seguinte forma.
cp "/home/$variavel/arquivo" "$destino" 




... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)


9. Re: shell script

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 14/10/2020 - 16:20h

Novaesma escreveu:
quando rodo ele na manualmente da isso

[email protected](ip)'s password:
/home/saai/Catalogo/CHPE/2020/Wed: No such file or directory
Oct: No such file or directory
14: No such file or directory
ssh: connect to host 12 port 22: Invalid argument
UTC: No such file or directory
2020/*: No such file or directory

Boa tarde NovaEsma,
Como já foi 'dito', o erro é causado por espaços no nome dos arquivos.....
Aconselho, tirar esses espaços....
Se na sua distribuição tem o comando "rename", é bastante fácil .....
Ex: rename 's/ /_/g' *.txt
Pega todos *.txt do dir corrente, e troca espaço por "_"

Segue sugestão para o script:
#!/bin/bash
linha="|--------------------------------------------|";
LOG="./reg-log.txt";

printf "${linha}\n Sincronização iniciada: %(%x-%X)T\n${linha}\n" >> $LOG

# -r => Recursively copy entire directories.
for Dirs in CHP{E,I,G};do
scp -r "/home/saai/Catalogo/${Dirs}/2020/" [email protected]:/home/Teste/Config/TEMP/
done
printf "${linha}\n Sincronização finalizada: %(%x-%X)T\n${linha}\n" >> $LOG



______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________


10. Re: shell script

matheus novaes marinho
Novaesma

(usa Outra)

Enviado em 16/10/2020 - 09:23h

Ata entedi agora... então so não ta indo por conta de espaços que tem no nome dos arquivos ou no script.
obrigado pela ajuda!!


11. Re: shell script

matheus novaes marinho
Novaesma

(usa Outra)

Enviado em 16/10/2020 - 11:35h

msoliver escreveu:

Novaesma escreveu:
quando rodo ele na manualmente da isso

[email protected](ip)'s password:
/home/saai/Catalogo/CHPE/2020/Wed: No such file or directory
Oct: No such file or directory
14: No such file or directory
ssh: connect to host 12 port 22: Invalid argument
UTC: No such file or directory
2020/*: No such file or directory

Boa tarde NovaEsma,
Como já foi 'dito', o erro é causado por espaços no nome dos arquivos.....
Aconselho, tirar esses espaços....
Se na sua distribuição tem o comando "rename", é bastante fácil .....
Ex: rename 's/ /_/g' *.txt
Pega todos *.txt do dir corrente, e troca espaço po "_"

Segue sugestão para o script:
#!/bin/bash
linha="|--------------------------------------------|";
LOG="./reg-log.txt";

printf "${linha}\n Sincronização iniciada: %(%x-%X)T\n${linha}\n" >> $LOG

# -r => Recursively copy entire directories.
for Dirs in CHP{E,I,G};do
scp -r "/home/saai/Catalogo/${Dirs}/2020/" [email protected]:/home/Teste/Config/TEMP/
done
printf "${linha}\n Sincronização finalizada: %(%x-%X)T\n${linha}\n" >> $LOG



______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________

deixa eu so tirar uma duvida.... se eu for fazer um scrip pra cada dir eu teria que coloca o dir ao invés disso
for Dirs in CHP{E,I,G};do 



12. Re: shell script

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 16/10/2020 - 18:58h

Novaesma escreveu:

msoliver escreveu:

Novaesma escreveu:
quando rodo ele na manualmente da isso

[email protected](ip)'s password:
/home/saai/Catalogo/CHPE/2020/Wed: No such file or directory
Oct: No such file or directory
14: No such file or directory
ssh: connect to host 12 port 22: Invalid argument
UTC: No such file or directory
2020/*: No such file or directory

Boa tarde NovaEsma,
Como já foi 'dito', o erro é causado por espaços no nome dos arquivos.....
Aconselho, tirar esses espaços....
Se na sua distribuição tem o comando "rename", é bastante fácil .....
Ex: rename 's/ /_/g' *.txt
Pega todos *.txt do dir corrente, e troca espaço po "_"

Segue sugestão para o script:
#!/bin/bash
linha="|--------------------------------------------|";
LOG="./reg-log.txt";

printf "${linha}\n Sincronização iniciada: %(%x-%X)T\n${linha}\n" >> $LOG

# -r => Recursively copy entire directories.
for Dirs in CHP{E,I,G};do
scp -r "/home/saai/Catalogo/${Dirs}/2020/" [email protected]:/home/Teste/Config/TEMP/
done
printf "${linha}\n Sincronização finalizada: %(%x-%X)T\n${linha}\n" >> $LOG



______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________

deixa eu so tirar uma duvida....
se eu for fazer um scrip pra cada dir eu teria que coloca o dir ao invés disso
for Dirs in CHP{E,I,G};do 

Justamente....
"Isso" => CHP{E,I,G},
É uma Expansão de Chaves, e retorna
CHPE CHPI CHPG
Se você tem de CHPA até CHPZ, é só fazer:
CHP{A..Z}
----------------------------------------------------------------------
Se tem somente um diretório elimine o laço.
#!/bin/bash
linha="|--------------------------------------------|";
LOG="./reg-log.txt";
printf "${linha}\n Sincronização iniciada: %(%x-%X)T\n${linha}\n" >> $LOG
scp -r "/home/saai/Catalogo/Diretório/2020/" [email protected]:/home/Teste/Config/TEMP/
printf "${linha}\n Sincronização finalizada: %(%x-%X)T\n${linha}\n" >> $LOG



______________________________________________________________________
Devido a muitas perguntas, segue esclarecimento:
O comando: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p',
faz parte da minha assinatura.
O qual, "filtra" a página: "https://www.vivaolinux.com.br/termos-de-uso/",
Mostrando o seguinte:
Se você sanou sua dúvida ou resolveu um problema a partir de um
tópico criado, é extremamente recomendável que acesse o tópico e
marque-o como "RESOLVIDO". E mais recomendável ainda que você eleja
como melhor resposta a que mais lhe ajudou.

______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts