rsync 명령을 시작하는 backup.sh 파일이 있습니다. 이 rsync는 Raspbian을 실행하는 RaspberryPi에서 전용 서버를 백업하기 위한 것입니다.
(저는 키체인을 사용하기 때문에 비밀번호 등을 입력할 필요가 없습니다...)
문제는 배치를 수동으로 시작하면 모든 것이 잘 작동하지만 crontab(동일한 사용자 사용)에서는 다음 오류가 발생한다는 것입니다.
2013/10/07 19:36:02 [6456] rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
2013/10/07 19:36:02 [6456] rsync error: error in rsync protocol data stream (code 12) at io.c(605) [Receiver=3.0.9]
이것은 내 backup.sh 파일입니다.
#!/bin/bash
echo "_ backup start "$(date +%H:%M:%S)
echo " "
/usr/bin/rsync -avh --rsync-path='/usr/bin/rsync' --delete --log-file='/home/user/rsync.'$(date +%d%m%Y-%H%M%S)'.log' --rsh='ssh -p 1234' [email protected]:/path/to/archives/ /media/backup/
echo " "
echo "_ backup end "$(date +%H:%M:%S)
이제 crontab 라인(crontab -e)
# m h dom mon dow command
30 5 * * * /home/user/backup.sh | mail -s "Backup RPi "$(date +\%d/\%m/\%Y-\%X) [email protected]
인사
답변1
(저는 키체인을 사용하기 때문에 비밀번호 등을 입력할 필요가 없습니다...)
좋습니다. cron 작업에서 실행 중인 프로그램에 키체인을 찾는 방법을 알려주어야 합니다.
SSH는 환경 변수(키체인 가장)를 통해 SSH 에이전트를 찾습니다 SSH_AUTH_SOCK
. 따라서 crontab에서 이 환경 변수를 설정해야 합니다.
일반적인 구성에서는 SSH_AUTH_SOCK
임의의 이름을 가진 소켓에 대한 경로입니다. 키체인을 사용하고 있으므로 해당 소켓의 대체 이름을 쉽게 찾을 수 있습니다. 키체인은 ~/.keychain
설정 SSH_AUTH_SOCK
및 기타 유사한 변수( SSH_AGENT_PID
, ) GPG_AGENT_INFO
에 대한 환경 변수 선언이 포함된 파일을 작성합니다. 따라서 크론 작업에 적절한 파일을 포함시키면 됩니다.
[email protected]
30 5 * * * . ~/.keychain/$(hostname)-sh; /home/user/backup.sh
(여담: cron에는 작업 출력이 포함된 이메일을 보내는 기능이 내장되어 있으므로 작업이 실제로 일부 출력을 생성하는 경우에만 이메일을 받을 수 있습니다. 조작이 필요하지 않습니다 | mail
.)
답변2
cronjob을 통해 SSH 연결이 작동하지 않습니다. SSH 인증을 어떻게 수행해야 합니까? ID 키나 비밀번호를 나열하려는 시도는 보이지 않습니다. 이것이 작동하는 방식이라면 (비밀번호 없는...) 키의 경로에 "-i"를 붙여넣을 것입니다. 명령줄과 cronjob의 주요 차이점은 환경(환경 변수, 제어 터미널 부족 등)에 따라 달라지는 경우가 많습니다.
답변3
주제에 대한 인용 문제가 있다고 생각합니다.
mail -s "Backup RPi "$(date +\%d/\%m/\%Y-\%X) [email protected]
다음과 같아야 합니다.
mail -s "Backup RPi $(date +\%d/\%m/\%Y-\%X)" [email protected]
대체 방법
또한 이메일을 스크립트로 래핑하겠습니다.
#!/bin/bash
(
echo "_ backup start "$(date +%H:%M:%S)
echo " "
/usr/bin/rsync -avh --rsync-path='/usr/bin/rsync' --delete \
--log-file='/home/user/rsync.'$(date +%d%m%Y-%H%M%S)'.log' \
--rsh='ssh -p 1234' [email protected]:/path/to/archives/ /media/backup/
echo " "
echo "_ backup end "$(date +%H:%M:%S)
) | mail -s "Backup RPi $(date +\%d/\%m/\%Y-\%X)" [email protected]
그런 다음 crontab 항목을 다음으로 변경하십시오.
30 5 * * * /home/user/backup.sh
또한 이 크론을 실행하는 계정이 실제로 이메일을 보낼 수 있는지 확인하세요. 테스트를 해보세요.