rsnapshot을 통해 사용자 정의 백업 스크립트를 실행하려고 합니다. 단순히 주어진 git 저장소를 현재 작업 디렉토리에 복제합니다. rsnapshot 없이 실행하면 제대로 작동합니다.
/etc/rsnapshot.config:
backup_script /usr/local/bin/gitbackup.py -r https://foo.bar/myrepo.git -u username -f /root/.pwd git/myrepo.git/
그러면 백업 위치에 myrepo/.git 아래에 .git이 있는 디렉터리가 생성되고 오류가 발생합니다.
# rsnapshot -v daily
[...]
error: could not lock config file /var/cache/rsnapshot/tmp/myrepo/.git/config: No such file or directory
fatal: could not set 'remote.origin.fetch' to '+refs/heads/*:refs/remotes/origin/*'
rsnapshot 사용자와 루트 모두 홈 디렉터리에 ~/.gitconfig를 가지고 있습니다.
또한 sudo로 실행해 보았습니다. 그 결과는 다음과 같습니다.
Cloning into 'myrepo'...
/bin/rm -rf /var/cache/rsnapshot/tmp/
/bin/rm: cannot remove '/var/cache/rsnapshot/tmp/myrepo/.git': Directory not empty
----------------------------------------------------------------------------
rsnapshot encountered an error! The program was invoked with these options:
/usr/bin/rsnapshot -v daily
----------------------------------------------------------------------------
ERROR: Warning! /bin/rm failed.
ERROR: Could not rm_rf("/var/cache/rsnapshot/tmp/");
rm -f /var/run/rsnapshot.pid
fatal: remote-curl: fetch attempted without a local repo
무슨 일이 일어나고 있는지 아시나요? 아마도 git에 대한 일부 환경 변수를 설정해야 합니까?
답변1
문제는 지정되지 않은 작업 디렉터리였습니다. 분명히 rsnapshot은 /var/cache/rsnapshot/tmp/
기본적으로 사용되며 /var/cache/rsnapshot
rsnapshot 사용자만 읽고 쓸 수 있습니다(backup_script는 루트로 실행됨).
내 백업 스크립트는 이제 작업 디렉토리를 변경하고 체크아웃하며 /home/rsnapshot/git_backup
이 디렉토리는 일반 backup
지시어를 사용하여 백업됩니다.
backup_script /usr/local/bin/gitbackup.py -r https://foo.bar/myrepo.git -u username -f /root/.pwd -w /home/rsnapshot/git_backup git_tmp/myrepo.git/
backup /home/rsnapshot/git_backup/ localhost_git/
/var/cache/rsnapshot/daily.0/localhost_git
이제 아래의 동기화된(복제된 것이 아닌) 체크아웃에는 디렉터리 만 포함되어 있고 다른 것은 아무것도 포함되어 있지 않다는 문제가 발생했습니다 ~/.git
. 그러나 이는 다른 문제입니다.