파일이 변경 될 때 명령 실행


9

매일 .csv 파일을 특정 폴더 / tmp / data_upload에 업로드하는 시나리오가 있으며 이전 파일은 새 폴더로 바뀝니다.

데이터가 업로드되면 Python 스크립트를 실행해야합니다. 이를 위해 크론 작업을 만들고 파일의 변경 사항을 모니터링하는 아이디어가 있습니다. 나는 inotify를 사용해 보았지만 Unix 도메인에별로 익숙하지 않습니다. 어떻게해야합니까?

업로드 폴더에 파일의 날짜가 변경된 경우 (예 : / tmp / data_upload) test.py 스크립트를 실행해야합니다.


eradman.com/entrproject 을 보았지만 직접 시도하지는 않았지만 관련이있는 것 같습니다.
OO

참고로, 파이썬에는 inotify라이브러리가 있습니다. 예를 들어 여기에 내 대답 중 하나를 참조하십시오. askubuntu.com/a/939392/295286
Sergiy Kolodyazhnyy

답변:


10

파일의 변경 사항을 모니터링 한 다음 스크립트를 실행하는 incrond (inotify cron 데몬)가 필요할 수 있습니다.

Incrond는 새 파일 추가, 수정, 삭제 등을 모니터링 할 수 있습니다. 이 기사 는 이벤트 incrond가 예제로 모니터링 할 수있는 것을 보여줍니다.

귀하의 경우의 예를 들어 /etc/incron.d/data_upload, 내용으로 파일 을 만들 수 있습니다

/tmp/data_upload IN_CREATE,IN_MODIFY /path/to/test.py 

2
이 이론적으로 질문에 대답 할 수 있습니다 동안, 바람직 할 것이다 여기에 대한 대답의 본질적인 부분을 포함하고 참조 할 수 있도록 링크를 제공합니다.
제럴드 슈나이더

상기시켜 주셔서 감사합니다. 링크에 대한 컨텍스트를 추가했습니다.
victoroloan

대답을 주셔서 감사합니다, 단지 incrontab shoudl execute incrontab -e를 루트로 설치 한 후 단계를 확인 하고이 줄을 포함 /tmp/data_upload IN_CREATE,IN_MODIFY test.py 하시겠습니까? 새 파일을 업로드 한 후 확인하려면 test.py 파일을 실행해야합니까? test.py 파일을 어디에 두어야합니까? 이것에 대한 절대 경로를 제공해야합니까?
Alex

1
나는 당신의 스크립트에 절대 경로를 두는 것이 더 좋을 것이라고 생각합니다. 스크립트가 작동하지 않는 것 같으면 cron 또는 시스템 로그를 확인할 수도 있습니다
victoroloan

코드 블록과 관련하여 어떤 파일을 문서화 할 수 있습니까? 나와 같은 Incrond 구문에 익숙하지 않은 사람들은 명령 행에서 실행해야하는 명령을 참조한다고 생각할 수 있습니다
Ferrybig


0

watchexec( https://crates.io/crates/watchexec ) 명령 행 유틸리티 소리가 나는 당신이 당신의 컴퓨터에 설치된 녹 빌드 도구가 필요 했어 설치 믿고 있지만, 그이 될 수 있도록, 필요한 것을 정확히 좋아 계약 위반


1
2004 년에 버려지지 않았기 때문에 녹으로 작성된 소프트웨어를 사용하는 것이 좋습니다. 거의 새로운 것이어야합니다.
Nathaniel Pisarski

0

내 일반적인 접근 방식은 고전적인 유닉스 find유틸리티를 사용하는 것입니다. 예를 들어

find /tmp/upload_data/*.csv -mtime -1 -exec /home/myname/test.py

어떤 찾을 수 .csv있는 파일 /tmp/upload_data미만 일 전 수정 된, 그리고 실행 test.py은 하나를 발견합니다. 물론 test.py파일이 다른 디렉토리에있는 경우 그에 따라 경로를 업데이트하려고합니다.

cron하루에 두 번 이상 작업을 자주 실행 하는 경우 mmin옵션을 사용하여 find수정 이후 최대 시간을 분 단위로 지정할 수 있습니다 . 예를 들어

find /tmp/upload_data/*.csv -mmin -60 -exec /home/myname/test.py

.csv60 분 전에 수정 된 파일을 검색합니다 . cron이 매시간 작업을 실행하는 경우에 유용합니다.

두 가지 공정한 경고가 순서대로 이루어집니다. 첫째, 이것은 .csv완전히 삭제 한 파일을 포착하지 않습니다 . 별도로 확인하시기 바랍니다. 둘째, 나는 이것을 테스트 할 시간이 없었습니다. 내 코드에서 오타를 직접 디버깅해야합니다.


1
-cmd구문 은 무엇입니까 ? IIRC find-exec cmd ;...
D. 벤 Knoble

나는이 질문을 게시하기 전에이 하나를 시도, 이것은 cron 작업의 2 연속 3 연속 실행에서 제대로 작동하지 않습니다
Alex

@디. 벤 노블 : 네 말이 맞아. 내부 명령 찾기와 쉘 명령을 섞었습니다. 결정된. 정정 주셔서 감사합니다!
Thomas Blankenhorn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.