나는 Chef를 혼자 설정하는 방법을 가르치는 Railscast를 팔로우하고 있습니다. 이전에 본 적이 없는 두 가지 흥미로운 터미널 명령을 사용하며 그 중 하나만 사용할 수 있습니다. 내가 할 때
scp -r [email protected]:/var/chef .
원격 서버 디렉터리의 내용을 내 로컬 컴퓨터에 복사합니다. 내 컴퓨터에서 파일을 변경한 후 다음 명령을 실행하면 파일이 서버에 다시 동기화됩니다.
rsync -r . [email protected]:/var/chef
그러나 변경 사항이 원격 서버에 표시되지 않으며 변경 사항을 적용해야 하는 Chef 명령을 실행할 때 수행해야 할 변경 사항이 표시되지 않습니다.
rsync를 잘못 사용하고 있습니까?
고쳐 쓰다
이 명령을 실행하면 다음과 같은 출력이 생성됩니다. 여전히 원격 서버에 변경 사항이 표시되지 않습니다.
rsync -rvv . [email protected]:/var/chef
`building file list ...
done
delta-transmission enabled
chef/node.json
chef/solo.rb
chef/cache/chef-client-running.pid
chef/cache/chef-stacktrace.out
chef/chef/node.json
chef/chef/solo.rb
chef/chef/cache/chef-client-running.pid
chef/chef/cache/chef-stacktrace.out
chef/chef/cookbooks/main/recipes/default.rb
chef/cookbooks/main/recipes/default.rb
chef/cookbooks/main/templates/default/zshrc.erb
total: matches=17 hash_hits=17 false_alarms=0 data=0
sent 1167 bytes received 442 bytes 643.60 bytes/sec
total size is 6236 speedup is 3.88`
고쳐 쓰다
위의 업데이트에서 templates
디렉터리가 main
내부(및 recipes
디렉터리)에 있어야 한다는 것을 알 수 있지만 표시된 내용은 다음과 같습니다.
root@Chef3:/var/chef/cookbooks# cd main
root@Chef3:/var/chef/cookbooks/main# ls
recipes
답변1
두 개의 파일 계층 구조가 함께 혼합되어 있습니다. 하나를 편집한 다음 다른 하나를 다시 읽는 것 같습니다 /var/chef
./var/chef/chef
scp -r [email protected]:/var/chef .
chef
현재 디렉터리 내에 디렉터리를 만듭니다. 당신이 출신이라면 /var/chef
.
제안된 명령은 끔찍합니다. 이 튜토리얼에서 읽은 모든 것을 잊어버리세요.
scp -r
파일 권한이나 시간은 유지되지 않습니다. scp -rp
그들을 구하기 위해 .
rsync -r
파일 권한이나 시간은 유지되지 않습니다. 해당 -r
옵션이 존재한다는 사실을 잊어버렸습니다. 대신 이것을 사용 rsync -a
하면 일반적인 메타데이터가 모두 보존됩니다. -a
그렇게 하지 않을 타당한 이유가 없는 한 항상 옵션을 rsync에 전달하십시오.
작성하면 rsync -a /path/to/source /path/to/destination
under라는 하위 디렉터리가 생성됩니다. 동기화하려면 대상 끝에 trailing: copy to를 추가하세요.source
destination
/path/to/source
/path/to/destination
/
rsync -a /path/to/source /path/to/destination/
/path/to/source/somefile
/path/to/destination/somefile
파일의 수정 시간을 유지하는 것이 중요합니다. 이렇게 하면 파일이 마지막으로 수정된 시기를 알 수 있습니다. 도구는 파일이 수정된 시기도 알고 있습니다. 특히 파일 시간이 안정적이라면 대부분의 파일이 수정되지 않은 대규모 디렉터리를 동기화하는 것이 훨씬 빠릅니다. Rsync는 양쪽의 이름, 크기 및 수정 시간이 동일한 경우 파일을 빠르게 건너뜁니다.
-u
옵션( )을 추가하면 rsync가 소스에서 최신 파일만 전송하도록 지시할 수 있습니다 rsync -au SOURCE DESTINATION
. 이렇게 하면 파일이 대상에서도 편집된 경우 위험이 제한됩니다. 대상에서 최신 버전을 삭제하지 않고 소스에서 이전 복사본을 삭제하지 않습니다. 그러나 충돌을 확실하게 감지할 수는 없습니다. 파일의 양쪽이 모두 편집된 경우 수정 시간이 가장 최근인 버전이 우선합니다.
rsync는 데이터의 단방향 동기화를 위한 도구입니다. 양방향 동기화에는 사용하지 마십시오. 대신에조화. Unison은 실행될 때마다 파일 버전 목록을 유지하고 충돌이 발생하면 큰 소리로 불평합니다(양 당사자가 동일한 파일을 독립적으로 편집합니다). Unison은 충돌이 없는 한 양쪽의 변경 사항을 병합합니다(즉, 각 파일이 동기화 사이에 한쪽에서만 수정되는 경우).
Unison을 설정하려면 GUI를 사용하거나 ~/.unison/chef.prf
"includes"라는 기본 설정 파일을 생성하세요.
root = /var/chef
root = server.example.com:/var/chef
times = true
두 개의 트리를 동기화하려면 실행하세요 unison -auto chef
.
파일을 동기화하는 대신 아래에 파일을 넣어야 합니다버전 관리. 변경한 후 저장소에 커밋합니다. 변경 사항을 배포하려면 서버에서 확인하세요.