problema con scripts (bash+expect) en cron
Aldrin Gonzalo Martoq Ahumada
amartoq en dcc.uchile.cl
Lun Jul 9 20:41:09 CLT 2007
On 7/7/07, Hugo Bravo R <hbit64 en gmail.com> wrote:
> Situacion:
> Necesito respaldar una base mysql desde un servidor remoto,
> guardando una copia local y a la vez, subirla a un sercidor ftp.
> Procedimiento:
> Hago un dump desde el equipo local y luego lo comprimo a tar.gz con
> un script en bash.
> Luego de esto, el mismo script llama a otro script con expect que
> sube el archivo al ftp.
> Cuando ejecuto el script por consola, ningun problema, funciona ok...
> El problema es cuando intento ponerlo en el cron.
> Cree 2 links simbolicos en /etc/cron.daily, que apuntan a cada
> archivo script.
> La maquina es un CentOS 4.5.
Hola, muy buena descripcion. Te falta ver los logs para ver por que no
funciona. Generalmente si el cron falla, se envia un email a
root en localdomain, revisa eso.
> Archivos:
>
> 1.- script en bash
> ---------------------------------------------------------------------------
> #!/bin/bash
>
> fecha=$(date +%Y%m%d)-$(date +%H%M)
>
> mysqldump -h 200.xx.xx.xx -u usuario -ppasswd --opt -f -v basex >
> tmpbk/basex.$fecha.sql
>
> tar zcvf tmpbk/basex.$fecha.tar.gz tmpbk/basex.$fecha.sql
>
> rm -f tmpbk/basex.*.sql
>
> #Aqui llama al script que sube al ftp
> ./bk.ftp.asp.exp
>
> rm -f tmpbk/basex.*
> ---------------------------------------------------------------------------
Creo que tu error debe estar cuando llamas al script que sube al ftp.
Como te dije, revisa el error en el email o tira la salida a otro
lado.
> 2.- script en expect
> ---------------------------------------------------------------------------
> #!/usr/bin/expect
>
> set site "ftp.servidor.cl"
> set user "usuario en servidor.cl"
> set pass "passwd"
> set path "tmpbk/"
> set files "basex.*"
>
> spawn ftp $site
> expect "Name"
>
> send "$user\r"
> expect "Password:"
>
> send "$pass\r"
> expect "ftp>"
>
> send "prompt\r"
> expect "ftp>"
>
> send "bin\r"
> expect "ftp>"
>
> send "lcd $path\r"
> expect "ftp>"
>
> send "mput $files\r"
> expect -timeout -1 "ftp>"
>
> send "bye\r"
> expect eof
> ---------------------------------------------------------------------------
Yo reemplazaria este script por esta linea:
lftp -e "lcd $path; mput *; quit" ftp://$user:$pass@$site/
--
Aldrin Martoq
Más información sobre la lista de distribución Linux