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 -nTony의 incrontab은 전경에서 incrond()를 실행하면 작동합니다.

루트의 incrontab을 위에 주어진 값으로 설정하면 서비스로 실행될 때에도 작동합니다.

내 Tony는 다음 위치에 있습니다 /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

이 지점에서,

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

관련 정보