incrond를 사용하여 Unison 실행(inotify cron 데몬)

incrond를 사용하여 Unison 실행(inotify cron 데몬)

우리는 이를 사용하여 unison두 서버를 동기화하려고 합니다. 명령줄과 bash 파일에서 다음 명령이 제대로 작동합니다.

unison -batch /var/www/html/test ssh://host-2//var/www/html/test

파일이 동기화 및 unison.log업데이트 중입니다. 여태까지는 그런대로 잘됐다.

예를 들어 기본 설정 파일과 함께 사용되며 .unison/default.prf설명된 대로 명령줄에서 간단히 실행됩니다.unison여기, 모든 것이 잘 작동합니다.

또한 incrondinotify cron 데몬을 설치했는데 원활하게 실행되었습니다. 다음 크론 작업은 정상적으로 실행됩니다.

/var/www/html/test IN_MODIFY,IN_ATTRIB,IN_CREATE touch /root/test

/root/test파일을 변경할 때마다 업데이트됩니다./var/www/html/test

여태까지는 그런대로 잘됐다! 그러나 incrontab을 사용하여 작동하지 않는 유일한 것은 다음과 같습니다.

/var/www/html/test IN_MODIFY,IN_ATTRIB,IN_CREATE unison

/var/www/html/test IN_MODIFY,IN_ATTRIB,IN_CREATE /usr/bin/unison

/var/www/html/test IN_MODIFY,IN_ATTRIB,IN_CREATE /usr/local/sbin/unison

/var/www/html/test IN_MODIFY,IN_ATTRIB,IN_CREATE unison -batch /var/www/html/test ssh://host-2//var/www/html/test

/var/www/html/test IN_MODIFY,IN_ATTRIB,IN_CREATE /usr/bin/unison -batch /var/www/html/test ssh://host-2//var/www/html/test

/var/www/html/test IN_MODIFY,IN_ATTRIB,IN_CREATE /usr/local/sbin/unison -batch /var/www/html/test ssh://host-2//var/www/html/test'

unison.log원격 서버 업데이트는 물론이고 파일에 아무것도 표시되지 않습니다 . 다음도 아무것도 출력하지 않습니다.

/var/www/html/test IN_MODIFY,IN_ATTRIB,IN_CREATE unison &> /root/test.log

/root/test.log아직 생성되지도 않았습니다.

" also "라는 배치 파일을 사용한 또 다른 테스트가 sync.sh작동하지 않았습니다.

인크론탭에서:

/var/www/html/test IN_MODIFY,IN_ATTRIB,IN_CREATE /root/sync.sh

그리고 sync.sh:

#!/bin/bash

touch /root/test
/usr/bin/unison -batch /var/www/html/test ssh://host-2//var/www/html/test

다시 한번 /root/test말하지만, inofify는 파일을 업데이트할 때마다 잘 작동 /var/www/html/test하지만 다시는 아무 결과도 나오지 않는다는 의미입니다 unison.

/var/log/cron은 다음과 같습니다:

May 21 06:33:44 Host-1 incrond[28339]: (root) CMD (sh /root/sync.sh)

그리고 unison.log업데이트가 전혀 없습니다.

결론적으로:

  1. inotify잘 작동하고 파일 시스템의 모든 변경 사항을 감지하고 작업을 실행합니다( unison모든 작업 제외).
  2. unison데몬 에 의해 incrond호출되지 않는 한 명령줄 및 배치에서 잘 작동합니다 .

내가 뭔가를 간과했나요?

답변1

SSH 연결을 설정하려면 클라이언트가 서버에 인증해야 합니다. 키가 비밀번호로 보호된 파일에 저장되고 SSH 에이전트에 로드되는 키 기반 인증을 사용 중일 수 있습니다. SSH 클라이언트는 환경 변수를 통해 프록시를 찾는 방법을 알고 있습니다 SSH_AUTH_SOCK. cron 또는 incron 작업에서는 환경이 대화형 세션의 환경과 다르며 매우 작은 환경이고 SSH 클라이언트가 없으므로 SSH_AUTH_SOCKSSH 클라이언트가 원격 시스템에 연결할 수 없습니다.

SSH 연결을 설정할 수 없는 경우 Unison은 동기화할 파일을 찾기도 시작하지 않으며 unison.log.

스크립트의 표준 오류에 오류 메시지가 있지만 어디에도 기록하지 않았습니다. exec 2>&1 >>~/.unison-sync.log; date스크립트 시작 부분에 이와 같은 내용을 추가하십시오.

SSH 연결이 제대로 작동하려면 Unison 작업을 예약하여 에이전트에 액세스하거나 비밀번호 없는 키를 설정해야 합니다. 프록시를 통해 진행하려면 다음을 참조하세요.Crontab에서 쉘 스크립트를 사용하여 원격 컴퓨터에 SSH를 통해 연결할 수 없습니다.;그러나 로그인한 경우에만 작동합니다. 동기화가 항상 작동하도록 하려면 비밀번호 없는 키가 유일한 솔루션입니다. Unison 및 SSH를 루트로 실행하고 있으므로 개인 키는 /root/.ssh계정이 아닌 에 있어야 합니다 . 의 모든 관련 옵션에도 동일하게 적용됩니다 .ssh/config. 서버 측에서는 command=…지시문을 사용하여 일관된 특정 명령 만 실행하도록 공개 키에 권한을 부여할 수 있습니다 .ssh/authorized_keys(참조:하나의 명령만 실행하는 UNIX 계정 만들기예를 들어). 명령 제한으로 인해 누군가 로컬 루트 계정에 대한 액세스 권한을 얻은 경우 unison …해당 특정 명령을 에서만 실행할 수 있습니다 host-2. Unison이 이런 식으로 임의의 코드를 실행하도록 속일 수 있는지는 모르겠습니다.

관련 정보