#  > Desenvolvimento >  > Linguagens de Programação >  >  Script com um pequena falha - Help me!

## aprendiz_ce

Tenho um script (bash) de backup que roda em dois servidores distinto, ambos são idênticos em tudo, tanto nos serviços como em pacotes instalados. Só que em uma das máquinas o script roda 100% e no outro roda 99% (rs). Que coisa! As linhas em questão são bem "simples" e ficam logo no inicio do script. 

Linhas em questão são as seguintes:

#!/bin/bash
#
rm -rf /home/share/sgr/*.dbf
rm -rf /home/share/sgr/*.DBF
rm -rf /home/share/sgr/*.fpt
rm -rf /home/share/sgr/*.FPT
rm -rf /home/share/sgr/*.idx
rm -rf /home/share/sgr/*.IDX
rm -rf /home/share/sgr/*.prn
rm -rf /home/share/sgr/*.PRN 

As referidas linhas do script são executadas, não mostram nenhum tipo de erro na sua execução, mas em compensação não fazem o que deveriam, pois ao termino de sua execução os arquivos continuam lá... Ah, e tem outro detalhe! Se eu executo a referida linha na mão... Funciona certinho. O que pode está acontecendo? 

Obrigado e aguardo qualquer ajuda.

----------


## tianguapontocom

Ele mostra algum erro ou msg? que distro ta usando?

----------


## aprendiz_ce

> Ele mostra algum erro ou msg? que distro ta usando?


Ola,

O script roda sem apresentar erro algum. A referida linha de comando se for executado no shell, funciona. Estou utilizando o Debian Etch.

Obrigado e aguardo qualquer ajuda.

----------


## ccmalarm

O script esta localizado onde?
Esta sendo executado como qual usuario?
Quais as permições do script?

enta fazer o seguite teste:



chmod 755 "nomedoscript"
depois roda ele
se nao funcionar faz assim:

entra como root e roda o script


espero q isso resolva









> Tenho um script (bash) de backup que roda em dois servidores distinto, ambos são idênticos em tudo, tanto nos serviços como em pacotes instalados. Só que em uma das máquinas o script roda 100% e no outro roda 99% (rs). Que coisa! As linhas em questão são bem "simples" e ficam logo no inicio do script. 
> 
> Linhas em questão são as seguintes:
> 
> #!/bin/bash
> #
> rm -rf /home/share/sgr/*.dbf
> rm -rf /home/share/sgr/*.DBF
> rm -rf /home/share/sgr/*.fpt
> ...

----------


## jweyrich

Qual usuário roda o script?
Talvez a permissão do script esteja correta, mas as permissões dos arquivos/diretórios que ele está tentando apagar, não estejam.

----------


## ccmalarm

pois esta dizendo a mesma coisa q eu ja disse....







> Qual usuário roda o script?
> Talvez a permissão do script esteja correta, mas as permissões dos arquivos/diretórios que ele está tentando apagar, não estejam.

----------


## mson77

Ola aprendiz_ce...



Alguns pontos que voce deve observar:

1) O seu script deve ser executável... portanto acredito que voce já tenha se atentado em observar que o atributo X (de execucao) está ativado.

Caso vc queira que o seu script seja executavel (acessivel e executavel por todos)... execute o comando:

chmod 755 <nome arquivo que contem script>

por exemplo:

* chmod 755 removetudo.sh*

===============================

2) Todos os arquivos possuem "donos". Portanto... para vc apagar... remover tudo como vc pretende fazer com seu script... o usuario que vai executar o script deverá ter "poderes" para deletar esses arquivos.

SE vc mesmo for o prorpio dono deles... tranquilo.
Caso vc nao seja o dono desses arquivos... entao... somente o dono ou alguem com super-poderes poderá obter sucesso.

NOTE: Talvez voce possa ter direito de execucao... (de execucao do script)... mas durante a execucao... vc nao tem sucesso na execucao de cada linha do seu script.

Caso vc nao seja o dono... execute o script assim:



* sudo removetudo.sh*

e depois digite a senha do root.



Espero te esclarecido e ajudado voce!




Abraços

----------


## ccmalarm

PQ NAO EXISTEM EM CANTO ALGUM...
POIS INVENTARAM OUTROS NOMES PAR ALGO COMUM...


EX:

CACHEFULL KKKK SERIA UM SQUID BEM CONFIGURADO COM BOAS REGRAS NO IPTABLES...

JA SUPER HYPER PLUG N PLAY REDE É A MAIOR IDIOTICE...

JA QUE MILHOES DE ROTEADORES WIRELESS NAO USAM ISSO NAO COM ESSE NOME... JA QUE ESSE NOME BONITO AI É PARA ENGANAR IDIOTA COMO VC.. .PENA Q O OUTRO TOPICO ESTA TRANCADO...

E SENTA E RODA...PQ TEM, Q SER MUITO MUITO OTARIO PARA COMPRAR UM LIXO BUGADO QUE NAO PASSA DE UMA DISTRO LINUX MUITO MUITO BIXADA QUE INCLUSIVE INFRINGE A LICENÇA "GPL" 
ENTAO NAO EXISTE MIKROTIK ORIGINAL NEM PIRATA
PQ UM PRODUTO QUE É BASEADO NA QUEBRA DE UMA LICENÇA GPL POR SI SO É UM CRIME!!!

CLICADOR DE MOUSE DO KCT!!! VAI TOMAR NO CU








> Ola aprendiz_ce...
> 
> 
> 
> Alguns pontos que voce deve observar:
> 
> 1) O seu script deve ser executável... portanto acredito que voce já tenha se atentado em observar que o atributo X (de execucao) está ativado.
> 
> Caso vc queira que o seu script seja executavel (acessivel e executavel por todos)... execute o comando:
> ...

----------


## mson77

Ôpa...


Não estou entendendo o português desse "*ccmalarm*".




Mas vejam senhores a condecoração que esse mesmo "ccmalarm" recebeu de um OUTRO FÓRUM.
Confira na URL abaixo... ULTIMA MENSAGEM DO MODERADOR DESSE FORUM.
*
Dizinha Linux :: Exibir tópico - so mais uma coisa o desenvolvedor original da dizinha é...
* 

Acredito que o português dele é chulo... e se vive no Brasil (Ceará) e não sabe usar a lingua pátria corretamente... quem dirá OUTRAS linguas estrangeiras.



Nem vou citar a postura dele aqui nos tópicos desse NOSSO FÓRUM... mas dá para perceber que contribuição positiva ficou distante... *embora falta de respeito, falta de coleguismo... sejam os PREDICADOS MAIS DOMINANTES E VISÍVEIS*.


* Fica na PAZ... alimente o espírito que carece de sociabilidade.*




Abraços,

----------


## lucianogf

Pessoal, vamos manter o escopo do tópico.

----------


## lucianogf

..........

----------


## aprendiz_ce

> O script esta localizado onde?
> Esta sendo executado como qual usuario?
> Quais as permições do script?
> 
> enta fazer o seguite teste:
> 
> 
> 
> chmod 755 "nomedoscript"
> ...


Beleza!!!

Mas o script está no "/etc" e as permissões estão como 777 e o mesmo é executado pelo CRONTAB.

Obrigado pela sua atenção.

----------


## mson77

Ola...




se voce colocou no CRONTAB... coloque o *caminho completo*:


* 3 * * * /etc/removetudo.sh

(executa todo dia as 03:00AM)


E... deixe apenas como 750... ninguem precisa ficar vendo esse script... que nao seja voce mesmo.





Abracos,

----------


## aprendiz_ce

> O script esta localizado onde?
> Esta sendo executado como qual usuario?
> Quais as permições do script?
> 
> enta fazer o seguite teste:
> 
> 
> 
> chmod 755 "nomedoscript"
> ...


Olá,

O script está no "/etc", as permissões estão 777 e a diretorio/arquivos também estão como 777.

Obrigado pela sua atenção.

----------


## aprendiz_ce

> Ola...
> 
> 
> 
> 
> se voce colocou no CRONTAB... coloque o *caminho completo*: 
> 
> * 3 * * * /etc/removetudo.sh 
> (executa todo dia as 03:00AM) 
> ...


Olá,

É como já falei antes: "o mesmo funciona 100% em uma máquina e 99% em outra..." os sistema são semelhantes em tudo, o mesmo funciona, só não executa o primeiro bloco de comandos. Por isso estou ENCUCADO, já que o referido comando funciona no shell (na mão).

Grato pela sua atenção.

----------


## mson77

Ola...



entao por favor... 

1) qual é o sistema1;
2) qual é o sistema2;
3) qual é o bloco que executa com sucesso;
4) qual é o bloco que NAO executa com sucesso;


Responda essas perguntas.




Abracos,

----------


## aprendiz_ce

> Ola...
> 
> 
> 
> entao por favor...  
> 1) qual é o sistema1;
> 2) qual é o sistema2;
> 3) qual é o bloco que executa com sucesso;
> 4) qual é o bloco que NAO executa com sucesso; 
> ...


Beleza!
1) Debian Etch r3
2) Debian Etch r3
3) É extenso e acho que não precisamos dele, pois o bloco que não funciona está logo no inicio do script.
4) Veja o inicio do meu tópico.

Grato pela sua valiosa atenção e fico no aguardo.

----------


## rmaximo

Bem, como parece que você já verificou as permissões e tudo mais, lendo o tópico me lembrei de algo similar que passei, eu tinha um script que fazia copia de backups e depois apagava alguns arquivos e um tempo depois eu percebi que o script não funcionava mais da forma certa, no meu caso especifico a parte que não funcionava era quando eu manda mudar o dono com o "chown" e no dia seguinte eu via que os arquivos não tinham mudado de dono e não mostrava erro nem nada, ou seja, bem parecido com o seu problema e depois de muito quebrar a cabeça eu descobri eu o tempo que eu tinha colocado no cron para ele executa já não era mais suficiente, pois ele executava o script *ANTES* dos arquivos de backup serem criados e por isso não mudava o dono do arquivo. Parecido com o seu, não? tentou conferir se no momento da execução do script os arquivos de fato existiam?

Espero ter ajudado.

ate+

----------


## aprendiz_ce

> Bem, como parece que você já verificou as permissões e tudo mais, lendo o tópico me lembrei de algo similar que passei, eu tinha um script que fazia copia de backups e depois apagava alguns arquivos e um tempo depois eu percebi que o script não funcionava mais da forma certa, no meu caso especifico a parte que não funcionava era quando eu manda mudar o dono com o "chown" e no dia seguinte eu via que os arquivos não tinham mudado de dono e não mostrava erro nem nada, ou seja, bem parecido com o seu problema e depois de muito quebrar a cabeça eu descobri eu o tempo que eu tinha colocado no cron para ele executa já não era mais suficiente, pois ele executava o script *ANTES* dos arquivos de backup serem criados e por isso não mudava o dono do arquivo. Parecido com o seu, não? tentou conferir se no momento da execução do script os arquivos de fato existiam?
> 
> Espero ter ajudado. 
> ate+


Olá,

Os arquivos existem sim, é quanto que eles já estão deixando o meu backup ENORME pois os referidos arquivos são todos arquivos desnecessarios.

Já verifiquei tudo, e não sei mais o que fazer, por isso é pedi ajuda aqui no forum.

Grato e aguardo qualquer ajuda.

----------


## lucianogf

cara.. 
experimenta usar o script abaixo, altere de acordo com o caminho dos arquivos:



```
#!/bin/bash
cd /caminho/dos/arquivos
a="dbf DBF fpt FPT idx IDX prn PRN"
for i in $a; do
   rm -rf *.$i;
done
```

 

CUIDADO ao alterar este script, pois se houver um espaço entre o "*" e o "." será apagado tudo no diretório corrente..

scripts que envolvem o comando 'rm' são perigosos...

para testar, você pode substituir o comando "rm" pelo "ls", quando executar o script deverá mostrar todos os arquivos com as extensões contidas na variável $a

poste a linha do cron que executa seu script

----------


## aprendiz_ce

> cara.. 
> experimenta usar o script abaixo, altere de acordo com o caminho dos arquivos:
> 
> 
> 
> ```
> #!/bin/bash
> cd /caminho/dos/arquivos
> a="dbf DBF fpt FPT idx IDX prn PRN"
> ...


Beleza!!!

Vou testar isso daí o quanto antes, e assim que possível darei retorno.

Muito obrigado pela sua atenção e até mais.

----------


## aprendiz_ce

> Beleza!!!
> 
> Vou testar isso daí o quanto antes, e assim que possível darei retorno.
> 
> Muito obrigado pela sua atenção e até mais.


Olá,

Fiz o teste recomentado por você e ficou na mesma. Fiz o seguinte: Criei um script semelhante ao seu exemplo, só que no lugar do "rm -rf" coloquei o "ls -lia" confirme você menciona. A única diferença é que agora o referido script aponta o seguinte erro "./testescript.sh: line 6: /bin/ls: Lista de argumentos muito longa. E agora? Continuo sem endender nada!

Grato e fico no aguardo de um comentário seu.

----------


## lucianogf

uhmm...

"lista de argumentos muito longa" isso já é alguma coisa, existe uma limitação no linux com relação a trabalhar com muitos arquivos ao mesmo tempo, não lembro qual variável no /proc precisa ser alterada pra poder trabalhar com arquivos acima do normal. Mas podemos resolver este problema alterando o script.




```
#!/bin/bash
cd /caminho/dos/arquivos
a="dbf fpt idx prn"
for i in $a; do
   for u in `find . -type f -iname "*.$i" -print 0`; do
       echo $u
   done
done
```

 O script acima deverá listar todos os arquivos do diretório que está no começo dele..

Se funcionar é só substituir o "echo" por "rm -f"

----------


## lucianogf

O script acima irá tratar arquivo por arquivo, e não arquivos em massa...

----------


## lucianogf

cara...

fiz um teste aqui e o script que passei por ultimo não funciona...

os arquivos que você vai trabalhar possuem espaço no nome?

----------


## aprendiz_ce

> cara...
> 
> fiz um teste aqui e o script que passei por ultimo não funciona...
> 
> os arquivos que você vai trabalhar possuem espaço no nome?


Olá lucianogf,

Os arquivos em questão não teram espaços em branco no seu nome. OK?
O que me dei mais ENCUCADO quanto a essa problema é que as máquinas são semelhantes, os serviços e os pacotes instalados. Em uma funciona e na outra não.

Grato pela atenção.

----------


## lucianogf

cara..

fiz um teste nesse script aqui e ele funciona perfeitamente com arquivos que não tem espaço no nome



```
#!/bin/bash -v
DIR=/home/luciano/mp3
cd $DIR
a="mp3"
for i in $a; do
   find . -type f -iname "*.$i" -print0 | xargs -0 -i% echo % >> $i.txt
done
 
for b in $a; do
   for c in `cat $DIR/$b.txt`; do
      echo $c
   done
done
```

 você só precisa substituir o caminho e a variável $a, se aparecer os nomes normalmente é só trocar o "echo " por "rm -f"

valeu

----------

