[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[RESOLVIDO] Script não roda completo pelo crontab



Aí pessoal, problema resolvido, o que acontecia era o seguinte.
Quando rodamos o script pelo cron existe um limite de quantidade de caracteres a serem usados na ilnha de comando, no primeiro script tinha um echo mandando mensagens pra tela que eu tinah usado pra monitorar o q o script estava fazendo e acabei deixando lá.
Ao comentar o echo o script rodou normalmente até o final.
Porém, o tar não executava corretamente em todos os usuários, até certo usuario ele fazia o backup certo, depois ficava uns arquivos de 20bytes.
O detalhes era que eu tinha rodado o tar com o caminho completo da pasta a ser backupeada e aparecia a mensagem:

tar: Removing leading `/' from member names

Como isso ficava na linha de comando, quando chegava no limite do shell ele abortava o tar.
Por isso quando estava com o echo ia até certo usuario e com o echo comentando passava um pouco mas ainda não chegava até o final.
Pra eliminar essa mensagem foi só dar um cd nomediretoriobackup

Valeu a todos que deram uma força.

Segue abaixo como ficou o script e o crontab.

#### script ####

#!/bin/sh

ls /dados/home > /scripts/users.txt
cd /dados/home

for i in `cat /scripts/users.txt`; do
        tar -czf /backup/$i.tar.gz $i 2>&1 > /dev/null
        echo "tar -czf /backup/$i.tar.gz /dados/home/$i - `date`" >> /scripts/loguserbkp.txt
done



##### crontab   #####

# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file.
# This file also has a username field, that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
17 *    * * *   root    run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || run-parts --report /etc/cron.daily
47 6    * * 7   root    test -x /usr/sbin/anacron || run-parts --report /etc/cron.weekly
52 6    1 * *   root    test -x /usr/sbin/anacron || run-parts --report /etc/cron.monthly
#

# minuto hora diames mes diasemana usuario comando
07 1 * * * root sh /scripts/backup.sh
37 1 * * * root sh /scripts/bkpusers.sh
07 12 * * * root sh /scripts/backup.sh
07 12 * * * root sh /scripts/bkpusers.sh
         






-------- Mensagem encaminhada --------
De: Marcos <informativo@abctecnet.com.br>
Para: debian-user-portuguese@lists.debian.org
Assunto: Re: Script não roda completo pelo crontab
Data: Fri, 21 Oct 2005 16:02:19 -0200
Olá,

Deixei o script pra rodar a noite sem o echo exibindo na tela e habilitei novamente o tar.
Aconteceu algo semelhante, o script roda normalmente mas o tar só funciona até determinado usuario, os echos que direcionam o comando executado pro arquivo chegam até o final dos usuarios mas o tar não executa em todos, os arquivos .tar.gz que nã oficaram corretos ficaram com um tamanho de 20bytes. Deve ser algo em relação a limite mesmo, vou dar uma pesquisada nesse sentido.



Em Sex, 2005-10-21 às 10:53 -0200, Bruno de Oliveira Schneider escreveu:
On 10/20/05, Marcos wrote:
>  Funcionou parcialmente:
>
>  O script dessa maneira funciona. Comentei a linha do "echo" e o cron rodou
> o script até o final mandando a saida do outro echo para o arquivo. Foram
> todos os usuarios certinho. Se eu descomente o primeiro echo ele é
> interrompido em certo ponto.
>  Vou deixar rodando sem o primeiro echo e descomentar o tar pra ver se ele
> vai fazer o tar de todo mundo.
>  Amanhã posto o resultado.
>  Valeu a atenção de todos.
>
>
>  root@sax:~# cat /scripts/bkpusers.sh
>  #!/bin/sh
>
>
>  ####################   USUARIOS
> ######################################
>  #ls /dados/home > /scripts/users.txt
>  for i in `ls /dados/home`; do
>          #echo "tar -czf /backup/$k.tar.gz /dados/home/$k"
>          #tar -czf /backup/$i.tar.gz /dados/home/$i
>          echo "tar -czf /backup/$i.tar.gz /dados/home/$i - `date`" >>
> /scripts/loguserbkp.txt
>  done

Um chute:

Algumas coisas no Linux podem estabelecer limites de execução para um
processo (ver módulo pam-limits -- se não me engano). Um processo pode
ser limitado a um tempo de uso da CPU, quantidade de memória,
quantidade de E/S, etc.

É possível que o cron esteja colocando algum limite para o script e
esse limite não está sendo respeitado, o que faz o script receber um
sinal KILL. Se comentar o echo do início faz o script rodar pode ser
que o limite esteja na quantidade de dados escritos na saída padrão.
Isso pode ser verificado redirecionando esse echo para um arquivo e
fazendo um outro script, sem nenhuma relação com esse que escreve
muita coisa. Como o cron guarda o que foi escrito na saída padrão para
poder mandar por e-mail depois, é bem provável que haja um limite
assim mesmo.

Talvez o limite tenha valor somente para o processo que o cron chama,
mas não para seus filhos. Assim, vale tentar colocar o script no
diretório cron.hourly para ver se acontece o mesmo erro.

--
Bruno de Oliveira Schneider
http://www.dcc.ufla.br/~bruno/

--
Marcos <informativo@abctecnet.com.br>

Reply to: