아래 스크립트는 명령줄에서 실행할 때 제대로 실행됩니다. 또한 Cron 작업을 넣었고 sftpFileLog.txt에 항목이 표시되므로 Cron 작업이 실행 중이라는 것을 알 수 있습니다.
그러나 Cron Job으로 실행할 때 sftpLog.txt에서 볼 수 있는 것은 상단에 선을 그리고 현재 날짜/시간을 넣는 선뿐입니다. 또한 예상되는 두 파일은 Cron 작업에서 실행될 때 SFTP 서버에 표시되지 않습니다(그러나 Bash 스크립트를 직접 실행할 때는 표시됨).
나는 "Documents Here"를 내가 찾은 다른 여러 기사로의 리디렉션과 결합하려고 합니다.
보안 문제나 코딩 문제가 있을 수 있나요? 저는 숙련된 IT 전문가이지만 bash 스크립팅과 Linux는 처음 접합니다. (우분투 20.04 입니다.)
#!/bin/bash
currentDate=`date`
echo "------- $currentDate ------------------------------------------------------------" >>/home/nealwalters/bin/sftpFileLog.txt
echo "------- $currentDate ------------------------------------------------------------" >>/home/nealwalters/bin/sftpLog.txt
for filename in /home/nealwalters/downloads/*.csv; do
currentDate=`date`
echo "Loop: Filename=$filename"
echo "$currentDate SFTPUser3 Filename=$filename" >> /home/nealwalters/bin/sftpFileLog.txt
(
sftp -i /home/nealwalters/keys/SFTPUser1_Private.pem [email protected] << EOF
cd User3ToMyCompany
put $filename
exit
EOF
) >> /home/nealwalters/bin/sftpLog.txt
echo "----------------------------------------------------------------"
done
sftpLog.txt 파일의 예(노란색으로 강조 표시된 줄은 터미널에서 스크립트를 실행할 때 표시되는 예상 결과이며, 아래 줄은 Cron 작업에서 실행한 후 1분마다 표시됩니다).
- - - 2 부- - - -
이메일을 추가하면 오류가 발생하고 다른 두 위치 중 하나에 오류가 표시되지 않는다는 것을 믿을 수 없습니다. 1) 시스템 로그 2) 내 리디렉션이 내가 제공한 파일에 기록하지 않는 이유입니다.
나는 참조한다이 게시물이메일을 설정하고 확인하는 방법에 대한 정보를 얻으세요.
질문 1 - 여기 문서와 혼합된 리디렉션이 완전히 잘못된 것인가요? 질문 2 - Cron에서 실행할 때는 "호스트 키 확인 실패" 메시지가 표시되지만 직접 실행할 때는 표시되지 않는 이유는 무엇입니까? user=root 대신 user=nealwalters를 시도하여 차이가 있는지 확인하겠습니다.
----- 3부 --------
"root"에서 "nealwalters"로 변경하면 문제가 해결되는 것 같습니다.
"stderr"을 라우팅하지 않을 것 같습니다. 다음과 같은 것이 필요합니다: out 2> sftpLog.txt.
루트에 모든 권한이 없나요? 하지만 개인 키가 이상할 수 있고 한 명의 사용자만 액세스할 수 있다는 것을 알고 있습니다.
답변1
단지 터무니없는 추측일 뿐이지만, 이것도 효과가 있을까요?
scp -i /home/nealwalters/keys/SFTPUser1_Private.pem /home/nealwalters/downloads/*.csv [email protected]:User3ToMyCompany
~/.ssh/config
콘텐츠로 만들 수도 있습니다 .
Host company
Hostname 192.168.1.179
User STFPUser3
IdentityFile /home/nealwalters/keys/SFTPUser1_Private.pem
그런 다음 이렇게 하면 됩니다.
scp /home/nealwalters/downloads/*.csv company:User3ToMyCompany
스크립트를 실행하는 사용자에게 호스트에 대한 호스트 키가 없기 때문에 호스트 키 확인이 실패합니다. cronjob을 루트로 실행하고 있는 것 같습니다. 자신의 사용자를 사용하여 cronjob을 생성할 수도 있습니다 crontab -e
.
답변2
이메일을 설정하고 보는 방법에 대한 정보는 이 문서를 참조했습니다.
stderr 및 stdout은 당연히 이메일로 전송되므로 이메일 MTA(Mail Transfer Agent)를 설치해야 합니다.
aptitude install postfix
파일의 마지막 몇 줄을 보려면(또는 편집기에서 열려면) 이와 같은 명령을 사용하십시오.
tail -f /var/mail/<your_username>
그런 다음 보안 오류를 확인하고 cron 작업 파일의 사용자를 "루트"에서 ""로 전환해야 했습니다.