bash script retorna “out of memory” no cron, mas não no shell

2

Estou executando um script nocturno para sincronizar uma pasta remota (fonte) com uma pasta local (destino). Eu testei este script, baseado em rsync, e funciona bem em um shell de root. Leva tempo desde que há centenas de shows para copiar, mas funciona.

Depois de usá-lo no crontab, meu servidor fica sem memória.

Meu servidor tem 8GB de RAM, 4GB de swap e, como eu disse, o script nunca é OOM quando executado manualmente a partir de um shell. É uma instalação padrão do Centos 5.5. Eu poderia dividir a carga e sincronizar todos os dirs segundo nível em um script find / for, mas eu gostaria de mantê-lo simples e só sincronizar os diretórios de nível superior.

Não posso fazer muitos testes, pois esse servidor é usado para hospedar sites e outros serviços e não posso pendurá-lo apenas para fins de teste. Você conhece uma configuração que poderia permitir que o cron concluísse esse trabalho normalmente?

#!/bin/bash

BACKUP_PATH="/root/scripts/backup"

rsync -av --delete /net/hostname/source/ /export/target/ >     $BACKUP_PATH/backup_results_ok 2>  $BACKUP_PATH/backup_results_error

edit: a configuração do cron é o padrão, como /etc/security/limits.conf, que é todo comentado.

    
por Rosco 14.10.2010 / 16:00

2 respostas

1

Mesmo que o limits.conf esteja comentado, sugiro que você teste apenas para ter certeza. Uma maneira seria criar um cronjob que contenha algo como "ulimit -a | Mail -s 'limits' [email protected]" para que as informações sejam enviadas por e-mail para você. Uma vez que você sabe quais são os limites, você pode simplesmente redefini-los no shell script que realmente executa o rsync:

#!/bin/bash
ulimit -d unlimited
ulimit -m unlimited
ulimit -s unlimited
rsync [...]
    
por 14.10.2010 / 20:48
0

O problema é que você precisa configurar seus ulimits explicitamente (assim como o Deutsch recomenda), por causa da configuração do sistema. Quando você invoca um script do cron, os limites nem sempre são definidos (de acordo com a distribuição). Coloque-o no seu script e ele funcionará.

    
por 19.07.2012 / 10:10