incrontab: 수정된 파일 수정

incrontab: 수정된 파일 수정

을 사용하여 incrontab파일을 모니터링하고 파일이 수정될 때마다 그 안에 있는 문자열을 바꾸고 싶습니다. 하지만 이로 인해 무한 루프가 발생하는 것 같습니다. 다음 표로 구성하면 :

/etc/file.md    IN_MODIFY   sed -i 's/Hello/Hi/g' $@

한 번은 작동했지만 다시는 작동하지 않았습니다. 오류 메시지도 안 보이고 상태도 incrond양호하게 유지되는데 서비스가 무한 루프에 빠진 것 같아요. 다시 시작하면 다시 작동합니다.

이런 무한루프를 방지할 수 있는 방법이 있나요? 아니면 내 문제를 해결할 수 있는 다른 방법이 있나요?

답변1

알고 보니 무한 루프에 갇힌 것은 아니지만,이 오류.

내가 모니터링하고 있는 파일을 수정하는 서비스는 단순히 파일을 수정하는 것이 아니라 삭제하고 다시 생성하는 서비스입니다. 삭제하면 incrond시청이 중지되며, 이는 IN_IGNORED이벤트 녹화 시 확인할 수 있습니다. 그렇기 때문에 재부팅 후 항상 한 번만 작동합니다 incrond.

파일에 있는 시계를 잃지 않기 위해 링크된 GitHub 문제에서도 언급된 해결 방법을 사용했습니다. 파일을 직접 모니터링하는 것이 아니라 상위 디렉터리를 모니터링하고 있습니다. 이 디렉터리의 다른 모든 이벤트에 반응하지 않기 위해 sed명령을 스크립트 파일에 넣고 관심 있는 파일 이름에 대한 필터를 추가해야 했습니다.

/etc    IN_CLOSE_WRITE  /home/user/myscript.sh $@ $#

그리고 /home/user/myscript.sh:

#!/bin/bash
if [ "$2" == "file.md" ]; then
    sed -i 's/Hello/Hi/g' "$1/$2"
fi

또한 내 필요에 비해 너무 일찍 몇 밀리초가 트리거되는 것 같아서 로 IN_MODIFY변경 했습니다 .IN_CLOSE_WRITEIN_MODIFY

sed -i다행히 위의 표는 파일을 수정하거나 쓴 것이 아니라 교체( IN_MOVE_TO)했기 때문에 루프를 생성하지 않으므로 IN_MODIFY또는 IN_CLOSE_WRITE.

관련 정보