incrond가 서비스로 실행될 때 사용자의 incrontab이 작동하지 않습니다(루트만 해당).

incrond가 서비스로 실행될 때 사용자의 incrontab이 작동하지 않습니다(루트만 해당).

내 incrontab은 다음과 같습니다(tony의 incrontab).

/home/tony/Workspace/cocoonr/ui/static/ui/img/icons/vector IN_MODIFY,IN_CREATE,IN_MOVED_TO /bin/sh /home/tony/Workspace/cocoonr/boilerplate/svg2djangohtml $@/$# /home/tony/Workspace/cocoonr/ui/templates/inc/icons/

몇 가지 사항을 변경하면서 여러 번 테스트했는데 incrond가 서비스로 실행될 때(openrc 사용) 작동하도록 할 방법이 없었습니다.

전경( )에서 incrond를 실행하면 incrond -nTony의 incrontab이 작동합니다.

루트의 incrontab을 위와 같이 설정하면 서비스로 실행해도 작동합니다.

내 토니는 다음 위치에 있습니다 /etc/incron.allow.

root
tony

그리고 /etc/incron.deny.

나는 훨씬 더 간단한 incrontab을 사용해 보았습니다.

/tmp/foo IN_ATTRIB touch /tmp/bar

결과는 동일합니다.

사용자의 incrontab을 작동시키는 방법은 무엇입니까?

답변1

incrontab용 바이너리(저도 모르지만 사용한 적이 없음)에 SGID 비트가 설정되지 않은 경우 이러한 유형의 이상한 동작이 발생할 수 있습니다.

chmod g+s /path/to/binary(/usr/bin/incrontab, 아마도?) 로 설정하세요 .

다음을 통해 설정되었는지 평가할 수 있습니다.

ls -l /path/to/binary

(예)

ls -l /usr/bin/crontab
-rwxr-s--x 1 root crontab 44336 Jun 23 18:47 /usr/bin/crontab

답변2

비슷한 문제에 직면했습니다 (이 질문을 찾은 방법입니다).

다음 명령을 실행하면 작동합니다.

incrontab -n

문제는 incron/incrond 서비스가 실행되고 있지 않기 때문일 수 있습니다. 실행 중인지, 부팅 시 실행이 활성화되어 있는지 확인하세요(시스템이 다시 시작되는 경우).

제가 직면한 또 다른 문제는 제가 실수로 만든 무한 루프 때문이었습니다.
스크립트가 incron이 감시하고 있는 바로 그 폴더의 파일을 수정하는 경우 이벤트를 계속 트리거하고 각 이벤트는 (를 통해 fork()) 새로운 프로세스를 발생시킵니다. 곧 서비스는 더 이상 포크될 수 없습니다. 이 경우 서비스 로그에는 다음과 같은 오류가 표시됩니다.

cannot fork process: resource temporarily unavailable

이 지점에서,

  • 서비스를 중지하다
  • 감시 폴더 내의 파일을 수정하지 않도록 스크립트를 변경하십시오.
  • 서비스를 다시 시작하세요

관련 정보