Crontab não inicia, sem erros

1

Eu tenho a configuração abaixo do crontab;

45 9 * * * sh /home/renko/mysql.backup.sh > /home/renko/mysql_back_log.log

E meu roteiro é o seguinte:

#!/bin/bash
### Backup Folder dir ###
BAK="/var/www/backup/mysql/"
GZIP="$(which gzip)"
### FTP SERVER Login Stuff###
FTPU="someuser1"
FTPP="somepass1"
FTPS="someftpsite1"
FTPUU="someuser2"
FTPPP="somepass2"
FTPSS="someftpsite2"
NOW=$(date +"%d-%m-%Y")


[ ! -d $BAK ] && mkdir -p $BAK || /bin/rm -f $BAK/*

mysqldump -u root -h localhost --all-databases | gzip -9 > /var/www/backup/renko_backup_$NOW.sql.gz

lftp -u $FTPU,$FTPP -e "mput /var/www/backup/renko_backup_$NOW.sql.gz; quit" $FTPS >  /home/renko/mysql_back_log.log
lftp -u $FTPUU,$FTPPP -e "cd some_dir;mput /var/www/backup/renko_backup_$NOW.sql.gz; quit" $FTPSS >  /home/renko/mysql_back_log.log
mutt -s "database backup" [email protected]  -a /var/www/backup/renko_backup_$NOW.sql.gz >  /home/renko/mysql_back_log.log
mutt -s "Sunucu yedekleme" [email protected] -a /var/www/backup/renko_backup_$NOW.sql.gz >  /home/renko/mysql_back_log.log

Se eu usar o comando mysql.backup.sh como abaixo:

sudo sh /home/renko/mysql.backup.sh

o script funciona perfeitamente ... No entanto, por algum motivo, o crontab não faz esse script funcionar. Não consigo encontrar o log para erros do crontab. Ah, e antes que você pergunte eu adicionei o trabalho em crontab via;

sudo crontab -e

e serviço cron reiniciado via;

sudo service cron restart

Não consigo encontrar o problema. Eu estou usando o Ubuntu Server com o kernel 2.6.38-8. Qualquer conselho e apontar para qualquer fonte seria bem-vindo.

    
por JohnRoach 18.10.2011 / 09:07

2 respostas

2

Algumas coisas para verificar. Você não precisa que os comandos sh as em um crontab sejam passados para um shell de qualquer maneira. Seu problema específico provavelmente pode ser corrigido usando o -c flag, por exemplo,

45 9 * * * sh -c "/home/renko/mysql.backup.sh > /home/renko/mysql_back_log.log"

Isso diz para ler os comandos da string de comando ao invés de stdin.

Normalmente você usaria

45 9 * * * /home/renko/mysql.backup.sh > /home/renko/mysql_back_log.log

Atualização 1:

Eu acho que parte do seu problema é que você está redirecionando a saída do script no seu crontab e então redireciona a saída de vários comandos para o mesmo arquivo. Remova o redirecionamento de saída para o arquivo de log de dentro do script.

Atualização 2: Dos comentários.

Verifique se o seu usuário tem permissões para gravar no diretório que contém o arquivo de log. Além disso, verifique se o usuário tem pelo menos x permissão nos diretórios no caminho para seu arquivo de log.

    
por 18.10.2011 / 09:18
1

Enquanto estamos verificando as coisas, podemos ir ao menor denominador comum? Coloque em crontab

* * * * *  /bin/touch /tmp/nose

Se você pudesse primeiro fazer um /bin/touch /tmp/nose ; ls -al /tmp/nose ; rm /tmp/nose para podermos verificar que /tmp existe e é mundialmente gravável (você ficaria surpreso), então podemos pelo menos dizer se o cron é o problema, ou algo peculiar para o seu roteiro.

Editar : OK, isso é progresso. Agora, podemos abordar o tempo do seu roteiro? Você poderia adicionar

45 9 * * *  /bin/touch /tmp/toes

para o seu crontab? Dessa forma, podemos confirmar que o cron achou que as coisas que deveriam acontecer naquele momento, como o seu script, deveriam realmente acontecer.

    
por 18.10.2011 / 09:53

Tags