[FUG-BR] Problema com o cron

Luiz Otavio O Souza lists.br em gmail.com
Quarta Maio 18 10:34:01 BRT 2011


On May 18, 2011, at 10:14 AM, Diego Paludo wrote:

> Bom dia senhores e senhoras :)
> 
> Estou agendando no cron de um determinado usuario (crontab -e) um
> scriptzinho bash para fazer backup (dump) do mysql, porém ao executar tal
> script ele acusa erro na linha 28 do script:
> 
> "line 28: -u: command not found"
> 
> Mas se eu executar "na mão" o mesmo script não dá erro e faz tudo o que foi
> determinado no script.
> 

Como já falaram, problemas com o seu script...

Dentro do /etc/crontab você tem o PATH definido como:

# /etc/crontab - root's crontab for FreeBSD
#
# $FreeBSD: head/etc/crontab 194170 2009-06-14 06:37:19Z brian $
#
SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin


Ou seja, nada dentro do /usr/local


Veja só:


> Linha no "crontab -e":
> 00 23 * * * /home/dbbkp/mysql_bkp.sh
> 
> Segue o script:
> 
> #!/usr/local/bin/bash
> PATH=$PATH

Se você quer escrever um script portável (escreva no FreeBSD e ele vai funcionar no Linux), utilize o /bin/sh e evite o bash.

PATH = $PATH também não ajuda muito (isso não faz nada, certo ?) :|

> 
> # Binarios
> DUMP=`which mysqldump`
> SQL=`which mysql`
> ZIP=`which gzip`

O problema esta aqui, ao invés de usar o 'which' especifique o caminho completo dos utilitários, isso dá algum trabalho na hora de criar o script, mas poupa você de muita dor de cabeça mais tarde.

> 
> # Destino do backup
> BACKUP_DIR="/home/dbbkp/mysql_backup"
> 
> # Acesso ao MySQL
> USER="dbbkp"
> PASS="*******"
> 
> # Lista todos os bancos de dados
> DB_LIST=`$SQL -u $USER -p$PASS -Bse 'show databases'` >>>>>> essa é linha
> 28, onde da erro executando via cron
> 

De acordo com o erro:

> "line 28: -u: command not found"

Podemos imaginar que a variável $SQL não foi devidamente substituída pelo valor que você imaginava e acabou ficando em branco.



> # Lista de bancos de dados ignorados
> IGNORE="information_schema test"
> 
> TIME=`date +%F`
> 
> for db in $DB_LIST; do
>        skipdb=-1
> 
>        for i in $IGNORE; do
>                [ "$db" == "$i" ] && skipdb=1 || :
>        done
> 
>        if [ "$skipdb" == "-1" ]; then
>                $DUMP -u $USER -p$PASS $db | $ZIP -9 >
> $BACKUP_DIR/$db.$TIME.sql.gz
>        fi
> done
> 
> # Remove arquivos com mais de 8 dias de criacao
> find $BACKUP_DIR/* -mtime 8 -exec rm {} \;
> 
> exit 0
> # EOF
> 
> 
> Agradecido!!
> Diego

Não por isso...

Boa sorte,
Luiz



Mais detalhes sobre a lista de discussão freebsd