2012-12-28 4 views
0

또는 어떻게하면 sudo'ed rsync가 while 루프에서 무한대로 실행되는 것을 막을 수 있습니까? 그게 모두 (같은 느낌)가 일어나고 있고 그것을 얻지 못하기 때문에.왜 sudo는 while 루프에서 차단 명령을 비 차단 명령으로 변경합니까?

수정 된 파일을 동기화하기 위해 시계를 설정하려고하는데 제대로 작동합니다. 그러나 sudorsync 명령에 도입하면 inotify 이벤트가 하나만 발생하면 rsync 명령이 무기한 실행됩니다.

파일을 편집하면 rsync이 급속 모드로 전환됩니다. 그러나 sudo을 잃어 버리십시오. (물론 사용 권한이있는 폴더를 사용하십시오.) 스크립트는 예상대로 작동합니다.

  1. 왜 그렇습니까?
  2. sudo 명령을 사용하여 올바르게 작동시키는 방법은 무엇입니까?
+0

, 나는 rsync를 입력 할 암호를 기다리고있다 생각한다. 이것이 rsync가 무한정 실행되고 있다고 생각하는 방식입니다. 독립 실행 형 명령으로 명령 프롬프트에서 sudo'ed rsync를 실행 해 보았습니까? 암호를 묻는가? 그렇다면 expect 명령을 사용하여 암호 입력을 자동화 할 수 있습니다. – Icarus3

+0

이 명령은 암호없이 잘 작동합니다.'sudoers'에서'nopassword'로'rsync'를 사용할 수 있습니다. 명령도 제대로 실행되고 파일을 동기화합니다. 그러나 그것은 대본을 깨기 전까지 계속해서 반복합니다. – Redsandro

+0

아 !! 네 문제있어! 문제는 파일을 편집 할 때 대부분의 편집기가 스왑 파일을 만들거나 타임 스탬프를 업데이트하는 것입니다. 이것은 "inotifywait"에 많은 수정 통지를 발행하여 "-e close_write"스위치를 inotifywait 명령으로 전달해야합니다. 사실, 수정을 찾지 마십시오. 참조 : http://stackoverflow.com/questions/10300835/too-many-inotify-events-while-ed-in-vim – Icarus3

답변

1

나는 대답을 가지고 실험적으로 발견했다. 그러나 나는 이것이 왜 있는지 전혀 모른다. 누군가이 루프에서 sudo이 예상되는 차단 동작을 중단시키는 이유를 말해주십시오.

inotifywait -m -r --format '%w%f' -e modify /var/test | while read line; do 
    sh -c 'sudo rsync -ah "$line" "/home/test/"' 
done 

이상한 일이있다 : 래퍼 밖으로 sudo을 당겨 우리는이
이 올바른 :

sudo 이후 휴식 스크립트, 우리는 래퍼를 사용하여 sudo에서 자신을 거리를 수 오래된 결함있는 행동. 아주 이상한.
이것은 잘못된 것입니다 : 당신은 sudo를 적용 할 때

inotifywait -m -r --format '%w%f' -e modify /var/test | while read line; do 
    sudo sh -c 'rsync -ah "$line" "/home/test/"' 
done