Script para arquivos SCP funciona manualmente, mas não através do cron

2

Estou usando o CentOS 5.6. O código abaixo pode ter alguns erros de digitação, já que precisei alterar informações reais para informações falsas por motivos de segurança:

backup.sh

#!/bin/bash
set -vx
rm -v /server/temp_db.gz
rm -v /server/temp_ftp.tar
rm -v /server/temp_backup.tar
mysqldump --all-databases | gzip -9 > /server/temp_db.gz
echo "$(date +%H:%M:%S) - finished DB backup"
tar -Pcf /server/temp_ftp.tar /server/public_html/
echo "$(date +%H:%M:%S) - finished FTP backup"
tar -Pcf /server/temp_backup.tar /server/temp_db.gz /server/temp_ftp.tar
DATE='date +%A-%b-%d-%Y_%H-%M-%S'
sleep 120
/myfolder/upload.sh $DATE

upload.sh

#!/usr/bin/expect -f

# connect via scp
spawn scp /backup/temp_backup.tar [email protected]:/server/backup.tar
#######################
expect {
  -re ".*es.*o.*" {
    exp_send "yes\r"
    exp_continue
  }
  -re ".*sword.*" {
    exp_send "mypassword\r"
  }
}
interact

Eu criei 2 arquivos (acima):

cd /myfolder/
chmod +x backup.sh
chmod +x upload.sh
./backup.sh

Tudo funciona bem. O tempo em que temp_backup.tar é criado é de apenas 2 segundos após o registro de data e hora anterior e normalmente leva de 10 a 20 segundos quando o comando é executado manualmente:

rm -v /server/temp_db.gz
+ rm -v /server/temp_db.gz
removed '/server/temp_db.gz'
rm -v /server/temp_ftp.tar
+ rm -v /server/temp_ftp.tar
rm: cannot remove '/server/temp_ftp.tar': No such file or directory
rm -v /server/temp_backup.tar
+ rm -v /server/temp_backup.tar
rm: cannot remove '/server/temp_backup.tar': No such file or directory
mysqldump --all-databases | gzip -9 > /server/temp_db.gz
+ mysqldump --all-databases
+ gzip -9

echo "$(date +%H:%M:%S) - finished DB backup"
date +%H:%M:%S
++ date +%H:%M:%S
+ echo '20:50:16 - finished DB backup'
20:50:16 - finished DB backup
tar -Pcf /server/temp_ftp.tar /server/public_html/
+ tar -Pcf /server/temp_ftp.tar /server/public_html/
echo "$(date +%H:%M:%S) - finished FTP backup"
date +%H:%M:%S
++ date +%H:%M:%S
+ echo '20:50:19 - finished FTP backup'
20:50:19 - finished FTP backup
tar -Pcf /server/temp_backup.tar /server/temp_db.gz /server/temp_ftp.tar
+ tar -Pcf /server/temp_backup.tar /server/temp_db.gz /server/temp_ftp.tar
DATE='date +%A-%b-%d-%Y_%H-%M-%S'
date +%A-%b-%d-%Y_%H-%M-%S
++ date +%A-%b-%d-%Y_%H-%M-%S
+ DATE=Friday-Dec-16-2011_20-50-24
sleep 120
+ sleep 120
/myfolder/upload.sh $DATE
+ /myfolder/upload.sh Friday-Dec-16-2011_20-50-42
spawn scp /server/temp_backup.tar [email protected]:/backup/backup_Friday-Dec-16-2011_20-50-42.tar
Password:
temp_backup.tar                              100%  516MB  23.5MB/s   00:22

Agora eu configuro uma tarefa Cron:

* */10 * * * /myfolder/backup.sh 2>&1 > /myfolder/backup.log

Verifiquei se a tarefa Cron é executada por root , o mesmo que a execução manual, o proprietário dos arquivos é root:root e as permissões são -rwxr-xr-x em ambos os arquivos, mas, por algum motivo, ainda não trabalhos. Observe novamente o registro de data e hora antes de criar backup_temp.tar e após - apenas 2 segundos de diferença:

rm -v /server/temp_db.gz
+ rm -v /server/temp_db.gz
removed '/server/temp_db.gz'
rm -v /server/temp_ftp.tar
+ rm -v /server/temp_ftp.tar
removed '/server/temp_ftp.tar'
rm -v /server/temp_backup.tar
+ rm -v /server/temp_backup.tar
removed '/server/temp_backup.tar'
mysqldump --all-databases | gzip -9 > /server/temp_db.gz
+ mysqldump --all-databases
+ gzip -9
echo "$(date +%H:%M:%S) - finished DB backup"
date +%H:%M:%S
++ date +%H:%M:%S
+ echo '20:41:05 - finished DB backup'
20:41:05 - finished DB backup
tar -Pcf /server/temp_ftp.tar /server//public_html/
+ tar -Pcf /server/temp_ftp.tar /server/public_html/
echo "$(date +%H:%M:%S) - finished FTP backup"
date +%H:%M:%S
++ date +%H:%M:%S
+ echo '20:41:07 - finished FTP backup'
20:41:07 - finished FTP backup
tar -Pcf /server/temp_backup.tar /server/temp_db.gz /server/temp_ftp.tar
+ tar -Pcf /server/temp_backup.tar /server/temp_db.gz /server/temp_ftp.tar
DATE='date +%A-%b-%d-%Y_%H-%M-%S'
date +%A-%b-%d-%Y_%H-%M-%S
++ date +%A-%b-%d-%Y_%H-%M-%S
+ DATE=Friday-Dec-16-2011_20-41-09
sleep 120
+ sleep 120
/myfolder/upload.sh $DATE
+ /myfolder/upload.sh Friday-Dec-16-2011_20-39-08
spawn scp /server/temp_backup.tar [email protected]:/backup/backup_Friday-Dec-16-2011_20-39-08.tar^M
Password:
    
por Michael 17.12.2011 / 06:07

1 resposta

3

Verifique seus caminhos! Um erro comum ao criar tarefas agendadas é assumir que o caminho é o mesmo quando o cron é executado como quando o usuário executa o arquivo. mysqldump, e esperar que precisem receber caminhos completos, em vez de caminhos relativos.

    
por 31.12.2011 / 20:45