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을 파일로 리디렉션하면 >두 명령문의 출력만 남게 됩니다 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마지막에 참고하세요 . 이는 "파일 설명자 2, 을 stderr(를) 파일 설명자 1, 가 무엇이든 간에 리디렉션 stdout"을 의미합니다. 이미 stdout파일로 리디렉션했으므로 stderr해당 파일도 해당 파일로 리디렉션됩니다.

관련 정보