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

(저는 키체인을 사용하기 때문에 비밀번호 등을 입력할 필요가 없습니다...)

좋습니다. 크론 작업에서 실행 중인 프로그램에 키체인을 찾는 방법을 알려주어야 합니다.

SSH는 환경 변수를 통해 SSH 에이전트(키체인이 에뮬레이트하는)를 찾습니다 SSH_AUTH_SOCK. 따라서 crontab에서 이 환경 변수를 설정해야 합니다.

일반적인 구성에서는 SSH_AUTH_SOCK임의의 이름을 가진 소켓에 대한 경로입니다. 키체인을 사용하고 있으므로 해당 소켓의 대체 이름을 쉽게 찾을 수 있습니다. 키체인은 설정 및 기타 유사한 변수( , ) 를 ~/.keychain설정하는 환경 변수 선언이 포함된 파일을 기록합니다. 따라서 크론 작업에 적절한 파일을 포함시키면 됩니다.SSH_AUTH_SOCKSSH_AGENT_PIDGPG_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

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

관련 정보