cron에서 쉘 스크립트로 매개변수를 전달할 수 없는 이유 [닫기]

cron에서 쉘 스크립트로 매개변수를 전달할 수 없는 이유 [닫기]

이 cron 스크립트를 사용하여 Rsync를 작동시키려고 합니다.

*/1 * *    * * /root/backup.sh  `date +today/\%M`

그리고 아래와 같은 쉘 스크립트

#!/bin/bash -x
PATH=/bin:/usr/bin:/sbin:/usr/sbin
REMOTE="REMOTEADDRESS"
RSYNC=/usr/bin/rsync

댓글: 이게 효과가 있어요

$RSYNC -aqz --exclude-from '/home/root/backups/backup-exclude.txt' /var/www/html $REMOTE:backups/

댓글: 실패했어요

$RSYNC -aqz  --exclude-from '/home/root/backups/backup-exclude.txt' /var/www/html $REMOTE:$1/

전달된 매개변수가 스크립트에 올바르게 전달되지 않는 이유를 이해할 수 없습니다. 로그에는 모든 것이 예상대로 표시됩니다.

cron 업데이트 스크립트에 매개변수를 포함하지 않고 매개변수를 전달하는 이유는 다음을 허용하는 백업 계획을 세우기 위한 것입니다. - 일일 시간별 백업 백업 - 월별 백업 일일 백업 - 월별 내구성 있는 백업

매개변수 전달 시 발생하는 오류는 RSync가 원격 서버에서 mkdir을 수행할 수 없다는 것입니다. 모든 정적 라인과 함께 사용할 수 있습니다. 로그에는 현재 cron을 사용할 때 전달된 올바른 디렉터리가 표시됩니다.

답변1

dest/dir복사하려는 디렉터리가 원격 시스템( )에 있는지 확인해야 합니다.

rsync -aqz ./ user@host:dest/dir

최소한 마지막 디렉터리를 제외한 모든 디렉터리가 이미 존재해야 합니다. 이는 mkdir과 ​​동일한 동작입니다 mkdir. mkdir은 마지막 디렉터리만 생성합니다(기본적으로 이 -p옵션으로 변경할 수 있습니다). 즉, 원격 시스템에 존재하지 않는 한 rsync실패합니다./home/user/dest/dir

그것은 관련이 있다비교적목차.

에서도 같은 상황이 발생합니다순수한디렉토리(로 시작하는 디렉토리 /):

rsync -aqz ./ user@host:/home/user/dest/dir

규칙은 정확히 동일하지만 디렉토리는 다릅니다.추정사용자의 홈 디렉터리에 위치하지만 어디에나 위치할 수 있습니다(물론 사용자에게 쓰기 권한이 있어야 함).


rsync추가 테스트에서 if 가 다음과 같은 디렉토리를 사용한다는 것을 발견했습니다 .

newdir/testdir

최소한 newdir 디렉토리가 존재해야 합니다. 이는 mkdir과 ​​완전히 동일합니다. dir이 mkdir newdir/testdir없으면 newdirA는 실패합니다.

보고하신 것과 동일한 스크립트를 사용하여 테스트했습니다.

  • 고정 디렉토리와 함께 사용됩니다.
  • 인수에 지정된 디렉토리,
  • 스크립트 인수 $1에 지정된 디렉토리
  • 위의 모든 작업은 cron 유무에 관계없이 반복됩니다.

모든 경우에 초기 디렉터리가 누락되었습니다.두 부분디렉터리 가져오기 rsync에 실패했습니다.

관련 정보