mysqldump comando não está funcionando no cron job

0

Estou tentando fazer backup usando o script bash abaixo, agendado no cron.

#!/bin/bash
echo "Hello"
while read table
do
/usr/bin/mysqldump -uroot -pxxxxxx CMAYA_RadiusUserLogs $table > sc_back/${table}.sql
done < tables.txt

o cron está agendado como abaixo

58 16 * * * root /bin/sh -x /backup/call_backup.sh > /backup/backup.log

/ var / log / cron como abaixo

Jul  3 16:27:01  (root) CMD (/bin/sh -x /backup/backup.sh > /backup/backup.log)

/backup/backup.log

[root@ backup]# cat backup.log
Hello

Quando eu executo este mesmo script manualmente ele funciona corretamente e coloca qualquer outro comando no script que ele trabalha no cron job.

    
por Sagar Shinde 03.07.2017 / 13:57

3 respostas

1

O problema é que na última linha do script você precisa digitar o caminho absoluto completo para o arquivo tables.txt , caso contrário, a tarefa cron não poderá encontrá-lo.

O motivo pelo qual o script funciona quando você o inicia manualmente é que o arquivo tables.txt está localizado no diretório atual, portanto, o sistema não tem problemas em encontrá-lo.

    
por 03.07.2017 / 14:33
0

Quando o cron executa seu diretório de trabalho atual, o script é o diretório inicial do usuário da tabela cron (aparentemente / root), enquanto o script com seus arquivos está localizado em / backup. É por isso que o script não pode encontrar table.txt e o loop de tabela não possui iterações.

Você deve primeiro fazer o cd para o diretório do script e executá-lo, como:

58 16 * * * root cd /backup && /bin/sh -x call_backup.sh > backup.log
    
por 03.07.2017 / 14:43
0

Eu corrijo o caminho tables.txt, mas o problema ainda persiste, mas depois de redirecionar o std err 2 > & 1 ele começou a funcionar. A razão que eu encontrei que a mensagem de aviso "Aviso: Usando uma senha na interface de linha de comando pode ser inseguro." cria o problema. Depois dessa mensagem o mysqldump sai, então eu redirecionei o erro e ele começou a funcionar. Eu observei isso depois de atualizar o mysql para 5.6.

#!/bin/bash

echo "Hello"
while read table
do
touch sc_back/${table}.sql
/usr/bin/mysqldump -uroot -pxxxxx CMAYA_RadiusUserLogs $table > /backup /sc_back/${table}.sql
done < /backup/tables.txt
    
por 03.07.2017 / 14:50