¿Por qué sftp oculta el registro de la salida estándar?

¿Por qué sftp oculta el registro de la salida estándar?

Tengo un script a.shque tiene un sftpcomando:

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

END_SCRIPT
echo "Sftp successfully."

Si lo ejecuto de forma interactiva, sftpse muestra el resultado del registro. Sin embargo, si lo configuro en un crontab y redirijo la salida estándar a un archivo usando >, solo habrá el resultado de las dos echodeclaraciones. ¿Cómo puedo obtener el registro del sftpcomando?

EDITAR:

Probé los siguientes formularios y tampoco funcionó.

sftp -b archivo_por lotes.txt[correo electrónico protegido](redireccionamiento desde cron)

sftp -b archivo_por lotes.txt[correo electrónico protegido]>> some_file.log (redireccionamiento desde cron + redireccionamiento desde esta línea)

Creo que el problema debería estar relacionado con la naturaleza de sftp que se supone que debe ejecutarse de forma interactiva, como se indica en la página de manual. Pero no encuentro la solución.

mi distribucion:Red Hat Enterprise Linux AS release 3 (Taroon Update 2)

la entrada crontab:

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

Y el registro se crea con una hora que coincide con la entrada de crontab.

versión ssh:

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

EDITAR:

Descubrí que si redirijo la salida de sftp en el archivo de script a un archivo de texto, el mensaje de sftp se registra. Luego elimino el archivo de registro y lo programo con cron. Después de la ejecución del cron, se genera el archivo de registro pero no hay ningún mensaje de sftp. En cambio, solo contiene el registro de otra declaración dentro del archivo de secuencia de comandos.

Si redirijo la salida de sftp en un archivo de script y lo ejecuto de forma interactiva, el registro está perfectamente bien. Sin embargo, si lo programé con cron (sin redirección en la entrada de crontab, simplemente programelo), el registro de sftp también desapareció.

Respuesta1

Por lo que parece, redirección de salidaesocurriendo, pero probablemente quieras incluirlo stderrtambién. Prueba esto en tu crontab:

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

Tenga en cuenta el 2>&1al final. Significa: "redirigir el descriptor de archivo 2 stderr, a cualquier descriptor de archivo 1, stdout". Debido a que ya fue redirigido stdoutal archivo, stderrterminará allí también.

información relacionada