cron não sai corretamente?

0

Por favor, perdoe minha ignorância. Eu pesquisei, mas talvez eu não tenha certeza do que pesquisar para responder a minha pergunta, por isso estou recorrendo a este fórum para uma pequena orientação.

Eu levantei um servidor Ubuntu 12.04.3. Este servidor está executando principalmente o MySQL. Eu estou tentando configurar um trabalho que irá realizar um despejo diário.

Eu estou logado como meu próprio usuário, eu criei um arquivo executável chamado / home / xyz / MySQL_Dumps / RunMySQLDump

-rwxrwxr-x  1    0 1000       1012 Jan 15 15:26 RunMySQLDump

crontab –l mostra:

12 * * * * /home/xyz/MySQL_Dumps/RunMySQLDump

Conteúdo do RunMySQLDump:

MyTimeNow=$(date +"%Y%m%e_%H%M")

mysqldump  --host=localhost --user=<user> --password=<password>--max_allowed_packet=1G --skip-opt --port=3306 --default-character-set=utf8 --single-transaction=TRUE --dump-date=TRUE --comments --flush-privileges --force --all-databases --result-file=/home/xyz/MySQL_Dumps/$MyTimeNow-X.dump

mysqldump  --host=localhost --user=<user> --password=<password> --max_allowed_packet=1G --skip-opt --port=3306 --default-character-set=utf8 --single-transaction=TRUE --dump-date=TRUE --comments --flush-privileges --force --all-databases --result-file=/home/xyz/MySQL_Dumps/$MyTimeNow-Y.dump

mysqldump  --host=localhost --user=<user> --password=<password> --max_allowed_packet=1G --skip-opt --port=3306 --default-character-set=utf8 --single-transaction=TRUE --dump-date=TRUE --comments --flush-privileges --force --all-databases --result-file=/home/xyz/MySQL_Dumps/$MyTimeNow-Z.dump

tar -cvf $MyTimeNow-all.tar $MyTimeNow*.dump
gzip *.tar
rm $MyTimeNow*.dump

Então, aqui está o problema que estou enfrentando. Quando eu faço login no servidor como meu próprio usuário “xyz” e executo manualmente o comando ./ RunMySQLDump , tudo funciona bem:

/ home / xyz / MySQL_Dumps

-rw-rw-r--  1 1000 1000 1042848433 Jan 15 14:03 20140114_0310-all.tar.gz
-rw-rw-r--  1 1000 1000 1065212917 Jan 15 15:18 20140115_1512-all.tar.gz
-rw-rw-r--  1 1000 1000 1065718672 Jan 15 16:28 20140115_1622-all.tar.gz
-rw-rw-r--  1 1000 1000 1077965846 Jan 16 11:42 20140116_1136-all.tar.gz

No entanto, quando deixo o cron executar o trabalho, é isso que recebo: / home / xyz (nota: NÃO está em / home / xyz / MySQL_Dumps E não há dados!)

-rw-rw-r--  1 xyz xyz     67 Jan 16 16:12 20140116_1612-all.tar.gz

Alguém por favor pode me apontar na direção certa?

Obrigado imensamente!

    
por user236652 17.01.2014 / 00:00

1 resposta

0

Quando você executa com ./RunMySQLDump o diretório de trabalho do script é /home/xyz/MySQL_Dumps/ , é por isso que funciona.

Quando cron inicia o script, seu diretório de trabalho é /home/xyz/ (seu diretório pessoal) como está em um crontab de usuário.

As primeiras linhas do seu script usam caminhos absolutos, as últimas linhas usam caminhos relativos. É por isso que falha.

Basta alterar o diretório de trabalho no script antes de começar a usar caminhos relativos ou melhor no início do script:

cd /home/xyz/MySQL_Dumps/

Ou use caminhos absolutos em todos os lugares no script.

    
por falconer 17.01.2014 / 00:49