문제
- SFTP를 통해 파일 다운로드를 자동화하고 싶습니다.
- SFTP 서버와 키잉 메커니즘을 설정했습니다.
- 간단한 bash 스크립트를 만들었습니다.script.sh
- 스크립트를 위해 cron에 항목을 추가했습니다.
스크립트,script.sh:
#!/bin/bash
sftp user@server:/home/user/file.txt
exit 0
스크립트를 수동으로 실행하면 문제가 없지만(텍스트 파일은 홈 디렉터리에 저장됨)script.sh(적절한 권한이 있는 경우) crontab
아무 작업도 수행하지 않습니다.
crontab 항목:
* * * * * /home/user/script.sh
인증을 위해 ssh-keygen
키 세트(개인, 공개)를 만들고 SFTP 서버에 대한 교차 인증을 설정했습니다.
keychain
스크립트 자동화를 위해 비밀번호 없는 인증을 사용했습니다 .
현재
현재 저는 다음과 같은 스크립트를 가지고 있습니다.script.sh에 위치"사용자"홈 디렉토리( /home/user/
).
수동 으로 실행하면 root
스크립트는 SFTP 서버에서 파일을 가져와 /home/user/
.
작업 에서 실행할 때는 이 작업을 수행하지 않습니다 cron
. 에서는 cron
명령 sftp
에 오류가 발생합니다.
아이디어?
작업 중
- 변경집변수를 켜도
/etc/crontab
문제가 해결되지 않았습니다. - 전체 경로 명시script.sh문제를 해결하지 못했습니다
- 진술길변수script.sh문제를 해결하지 못했습니다
- 명령 에서 오류를 발견했습니다
sftp
.255
스크립트를 수동으로 실행하는 것( ./script.sh
)은 여전히 완벽하게 작동합니다.
답변1
실제 예:
hello.sh
텍스트 파일에 hello라는 단어를 추가하는 간단한 스크립트 (각 명령에 대해 전체 경로 사용):
메모 myuser
사용자의 이름입니다
#!/bin/bash
printf 'hello' >> /home/myuser/hello.txt
다음을 사용하여 스크립트를 실행 가능하게 만듭니다.chmod +x hello.sh
매분 실행되는 crontab 항목은 필요에 따라 변경할 수 있습니다.
* * * * * /home/myuser/hello.sh
일부 세부정보:
각 크론 작업은 이를 등록한 사용자로 실행됩니다. 루트 사용자가 cron 작업을 등록하면 이 작업은 루트 권한으로 실행됩니다.
루트가 아닌 사용자가 cron 작업을 등록하는 경우 이 작업은 앞서 언급한 사용자의 권한으로 실행됩니다. 작업에 루트 권한이 필요한 경우 루트가 아닌 사용자가 시작했기 때문에 실패합니다.
cron이 올바르게 찾아서 호출할 수 있도록 전체 경로를 사용하여 명령과 스크립트를 호출하는 것이 더 좋습니다. 그렇지 않으면 유용한 피드백 없이 실패할 수 있습니다.