Esperar script falha ao executar a partir do cron, mas funciona quando executado manualmente

0

Eu tenho um script no Linux que cria um arquivo que, uma vez criado, executa um script Expect que carrega o arquivo criado em um servidor SFTP. Eu tenho isso em execução no cron e por qualquer motivo o upload sempre falha, no entanto, quando eu executo o script no shell, o upload é bem-sucedido. Eu verifiquei os logs e eles não estão realmente me dizendo onde o processo está dando errado.

Aqui está o script de shell

#!/bin/bash

cd /home/mysql/paradata/repoupload || exit
mv /mnt/restrictedreports/Restricted/Corporate/Accounting/GL2013/gldetail.csv /home/mysql/paradata/repoupload 2>/dev/null
mv /mnt/restrictedreports/Restricted/Corporate/Accounting/GL2013/vgldetail.csv /home/mysql/paradata/repoupload 2>/dev/null




test -f gldetail.csv && ./SAFCO.sh
test -f vgldetail.csv && ./SAFCO.sh


if [ -f vgldetail.csv ]; then filename=vgldetail.csv; fi
if [ -f gldetail.csv ]; then  filename=gldetail.csv; fi


if [ $filename == gldetail.csv ];
then
./uploadsafco.exp REPOEX > lastftplogsafco.txt
else
 ./uploadvafco.exp REPOEX > lastftplogvafco.txt
fi

Este é o script esperado

#!/usr/bin/expect -f


set force_conservative 0 ;# set to 1 to force conservative mode even if
;# script wasn't run conservatively originally
if {$force_conservative} {
set send_slow {1 .1}
proc send {ignore arg} {
sleep .1
exp_send -s -- $arg
}
}

set arg1 [lindex $argv 0]

set timeout 30
expect_after {
        timeout { puts "Timeout"; exit 1 }
}
spawn sftp not@this
match_max 100000
expect "password: "
send -- "notapassword\r"
expect -exact "\r
sftp> "
send -- "cd /usr/data/r1/ED\r"
expect "sftp> "
send -- "progress\r"
expect -exact "progress\r
Progress meter disabled\r
sftp> "
send -- "put REPOEX\r"
expect "sftp> "
send -- "chmod 777 REPOEX\r"
expect "sftp> "
send -- "bye\r"
expect eof
exit
    
por Joseph Sortino 28.06.2017 / 15:20

2 respostas

4

"Funciona manualmente, falha no cron" é quase sempre devido a um destes:

  • diferenças nas variáveis de ambiente: PATH e outras;
  • diretório de trabalho atual diferente;
  • falta de um TTY (provavelmente não é um problema em esperar scripts);
  • permissões (teste interativo com um usuário, cron job com outro); ou
  • shell diferente: comandos executados dentro da própria linha de comando do cron usam um shell, você pode estar usando interativamente outro.
por 24.07.2017 / 21:25
0

Eu tenho um problema parecido com o meu script de spawn telnet. O script funciona bem até adicionar expect_after para o tempo limite do identificador. Tente remover expect_after {..}. É trabalho para mim.

    
por 08.05.2018 / 06:32