sftp가 stdout에서 로그를 숨기는 이유는 무엇입니까?

sftp가 stdout에서 로그를 숨기는 이유는 무엇입니까?

a.sh다음 명령이 포함된 스크립트가 있습니다 sftp.

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

END_SCRIPT
echo "Sftp successfully."

sftp대화형으로 실행하면 로그 출력이 표시됩니다. 그러나 crontab에서 설정하고 stdout을 file로 리디렉션하는 경우 두 개의 명령문에 대해서만 출력 >됩니다 . 명령에서 로그를 얻는 echo방법은 무엇입니까 ?sftp

편집하다:

다음 형식을 시도했지만 작동하지 않습니다.

sftp -b 배치 파일.txt[이메일 보호됨](크론에서 리디렉션됨)

sftp -b 배치 파일.txt[이메일 보호됨]>> some_file.log (cron에서 리디렉션 + 이 줄에서 리디렉션)

나는 문제가 매뉴얼 페이지에 명시된 대로 대화형으로 실행되어야 하는 sftp의 특성과 관련되어야 한다고 생각합니다. 하지만 해결책을 찾을 수 없습니다.

내 배포판:Red Hat Enterprise Linux AS release 3 (Taroon Update 2)

크론탭 항목:

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

로그가 생성된 시간은 crontab 항목과 일치합니다.

SSH 버전:

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

편집하다:

스크립트 파일의 sftp 출력을 텍스트 파일로 리디렉션하면 sftp의 메시지가 기록된다는 사실을 발견했습니다. 그런 다음 로그 파일을 삭제하고 cron을 사용하여 예약합니다. cron 실행 후 로그 파일이 생성되지만 sftp에서는 메시지가 없습니다. 대신 스크립트 파일 내의 다른 문의 로그만 포함합니다.

스크립트 파일에서 sftp의 출력을 리디렉션하고 대화식으로 실행하면 로그가 완벽하게 정상입니다. 그러나 cron을 사용하여 예약하면(crontab 항목에 리디렉션이 없고 예약만 가능) sftp의 로그도 사라집니다.

답변1

표면적으로는 출력 리디렉션발생하고 있지만 그것도 포함하고 싶을 수도 있습니다 stderr. crontab에서 이것을 시도해 보세요:

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

2>&1마지막에 주목하세요 . 의미는 다음과 같습니다. " stderr파일 설명자 2를 stdout파일 설명자 1, 의 위치로 리디렉션합니다." 이미 stdout해당 파일로 리디렉션했으므로 stderr결국 해당 파일로 이동하게 됩니다.

관련 정보