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