Por que o sftp oculta o log do stdout?

3

Eu tenho um script a.sh , que tem um comando sftp :

echo "Starting to sftp..."
sftp [email protected] << END_SCRIPT
ls
mput *.csv.gz
bye

END_SCRIPT
echo "Sftp successfully."

Se eu executá-lo interativamente, a saída de log de sftp é mostrada. No entanto, se eu configurá-lo em um crontab e redirecionar o stdout para um arquivo usando > , haverá apenas a saída das duas instruções echo . Como posso obter o log do comando sftp ?

EDITAR:

Eu tentei os seguintes formulários e também não funcionou.

sftp -b batch_file.txt [email protected] (redirecionamento do cron)

sftp -b batch_file.txt [email protected] > > some_file.log (redirecionar do cron + redirecionar desta linha)

Eu acho que o problema deve estar relacionado com a natureza do sftp que deve ser executado de forma interativa, como indicado na página man. Mas não consigo encontrar a solução.

Minha distribuição : Red Hat Enterprise Linux AS release 3 (Taroon Update 2)

a entrada do crontab :

52 14 * * * sh /home/xxx/testing/xxx.sh > /home/xxx/testing/xxx_'date +\%Y\%m\%d'.log

E o log é criado com um horário correspondente à entrada do crontab.

versão do ssh :

OpenSSH_3.6.1p2, SSH protocols 1.5/2.0, OpenSSL 0x0090701f

EDITAR:

Descobri que, se eu redirecionar a saída do sftp no arquivo de script para um arquivo de texto, a mensagem do sftp será registrada. Então eu removi o arquivo de log e agendei com o cron. Após a execução do cron, o arquivo de log é gerado, mas não possui mensagem do sftp. Em vez disso, ele contém apenas log de outra instrução dentro do arquivo de script.

Se eu redirecionar a saída do sftp no arquivo de script e executá-lo interativamente, o log estará perfeitamente correto. No entanto, se eu agendá-lo com o cron (sem redirecionamento na entrada crontab, simplesmente agendá-lo), o log do sftp também desaparecerá.

    
por lamwaiman1988 28.03.2012 / 04:52

1 resposta

1

Da aparência dele, o redirecionamento de saída está ocorrendo, mas você provavelmente também deseja incluir stderr . Tente isso no seu crontab:

52 14 * * * sh /home/xxx/testing/xxx.sh > /home/xxx/testing/xxx_'date +\%Y\%m\%d'.log 2>&1

Observe o 2>&1 no final. Isso significa: "redirecionar descritor de arquivo 2, stderr , para qualquer descritor de arquivo 1, stdout , é." Como você já redirecionou stdout para o arquivo, stderr terminará lá também.

    
por 28.03.2012 / 13:59