cron rsync 문제, 수동 조작은 문제 없습니다

cron rsync 문제, 수동 조작은 문제 없습니다

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

또한 이 크론을 실행하는 계정이 실제로 이메일을 보낼 수 있는지 확인하세요. 테스트를 해보세요.

관련 정보