Tengo un script a.sh
que tiene un sftp
comando:
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, sftp
se 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 echo
declaraciones. ¿Cómo puedo obtener el registro del sftp
comando?
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 stderr
tambié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>&1
al final. Significa: "redirigir el descriptor de archivo 2 stderr
, a cualquier descriptor de archivo 1, stdout
". Debido a que ya fue redirigido stdout
al archivo, stderr
terminará allí también.