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 <[EMAIL PROTECTED]>
Para: [email protected]
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. > > > [EMAIL PROTECTED]:~# 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 <[EMAIL PROTECTED]>

