[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