Cron Job não está executando no Ubuntu 12.04

0

Eu criei um cron job no meu console no Ubuntu 12.04) usando crontab -e :

10 09 * * * /home/ram-pc/Desktop/bala/personal/dump.sh

Mas não está em execução. Quando eu salvo, ele é instalado corretamente sem erros, então quando eu o visualizo usando crontab -l ele mostra meu crontab, mas ele não está rodando a tempo.

Meu dump.sh contém o comando backup database e se eu tentar executar separadamente esse arquivo .sh é executado corretamente.

Alguém pode me dizer qual é o problema?

O conteúdo do código dump.sh é:

cd
cd Desktop/bala/personal
mkdir $(date +%Y%m%d)
cd $(date +%Y%m%d)
mysqldump -u root -p*** --all-databases |gzip -9  >database-$(date +%Y%m%d).sql.gz
    
por Sathaya 12.12.2014 / 05:47

2 respostas

1

Este é o seu trabalho no cron e está bem:

10 09 * * * /home/ram-pc/Desktop/bala/personal/dump.sh

Defina para disparar todos os dias às 9h10. Mas olhar para o seu script mostra o problema:

cd
cd Desktop/bala/personal
mkdir $(date +%Y%m%d)
cd $(date +%Y%m%d)
mysqldump -u root -p*** --all-databases |gzip -9 >database-$(date +%Y%m%d).sql.gz

Quando uma tarefa cron é executada, ela não é executada como você - o usuário -, portanto, os caminhos para os arquivos binários não serão carregados. Então o script não tem idéia de onde mysqldump é. Então você deve executar which para descobrir qual é o caminho completo:

which mysqldump

E a saída deve ser algo assim; usando um exemplo genérico aqui:

/usr/local/bin/mysqldump

Além disso, você deve adicionar uma designação de script como a primeira linha do arquivo, para que o shell saiba qual ambiente deve ser executado. Além disso, o cd e o seguinte cd Desktop/bala/personal podem ser simplificados para cd ~/Desktop/bala/personal . Então, todo o novo script seria parecido com isto:

#!/usr/bin/env bash
cd ~/Desktop/bala/personal
mkdir $(date +%Y%m%d)
cd $(date +%Y%m%d)
/usr/local/bin/mysqldump -u root -p*** --all-databases |gzip -9 >database-$(date +%Y%m%d).sql.gz

Tente executar isso sozinho - na linha de comando - para ver se funciona. E se isso acontecer, execute-o a partir do cron novamente.

    
por 12.12.2014 / 07:23
0

Configure o cron job como abaixo, para que você capture os erros ao executar o script e também seu nome de usuário, por exemplo: charm_quark

  10 09 * * * charm_quark /home/ram-pc/Desktop/bala/personal/dump.sh >>  /home/ram-pc/Desktop/bala/personal/cron.log

Verifique também sua permissão e seus ambientes

Antes de usar um script personalizado, verifique se ele é executável e teste-o com o conjunto limitado de variáveis de ambiente definido pelo cron. Para replicar o ambiente que seria usado para executar a entrada cron acima, use:

env -i SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin HOME=/home/dru LOGNAME=dru /usr/home/dru/bin/mycustomscript.sh

Referência: Capítulo 12. Configuração e Ajuste

Etapas de solução de problemas

  1. Esvazie o arquivo dump.sh e substitua-o por algum eco

    #!/usr/bin/env bash echo "this is a test" >> /home/ram-pc/Desktop/bala/personal/test.log

  2. Verifique a permissão do arquivo .sh e altere-o.

    chmod 777 /home/ram-pc/Desktop/bala/personal/dump.sh

  3. Por favor atualize o crontab para

    * * * * * charm_quark /home/ram-pc/Desktop/bala/personal/dump.sh >> /home/ram-pc/Desktop/bala/personal/cron.log

por 12.12.2014 / 08:02

Tags