폴더를 듣고 변경 시 수신 파일 수정

폴더를 듣고 변경 시 수신 파일 수정

pcap 파일을 json 파일로 변환하기 위해 쉘 스크립트(및 tshark)를 사용하고 싶습니다. 새 pcap 파일이 폴더에 복사되면 tshark 명령을 실행하고 결과 json 데이터를 다른 파일에 다른 순서로 저장해야 합니다. 변환이 완료되면 pacap 파일을 즉시 삭제해야 합니다.

아이디어는 다음과 같습니다.

while(true){
   wait_for_IN_folder_changed
   tshark -T ek -x -r \in\in.pcap > \out\out.json
   rm \in\in.pcap
}

병렬성과 처리량을 높이려면 다중 스레드 방식으로 tshark 프로세스를 시작하는 것이 가장 좋습니다. 하지만 서로 다른 스레드가 서로 방해가 될 수 있습니까?

답변1

당신은 다음을 찾고 있을 수 있습니다:https://www.gnu.org/software/parallel/man.html#예: -GNU-Parallel-as-dir-processor

예: dir 처리기로서의 GNU Parallel

사용자가 처리가 필요한 파일을 넣을 수 있는 디렉터리가 있는 경우 GNU/Linux에서 이 작업을 수행할 수 있습니다(다른 플랫폼에서 inotifywait를 호출하는 것을 알고 있는 경우 버그 보고서를 제출하세요).

inotifywait -qmre MOVED_TO -e CLOSE_WRITE --format %w%f my_dir |\
  parallel -u echo

그러면 my_dir 또는 my_dir의 하위 디렉터리에 있는 모든 파일에 대해 echo 명령이 실행됩니다.

물론 -S를 사용하여 원격 시스템에 작업을 배포할 수 있습니다.

inotifywait -qmre MOVED_TO -e CLOSE_WRITE --format %w%f my_dir |\
  parallel -S ..  -u echo

처리할 파일이 tar 파일에 있는 경우 먼저 모든 파일을 압축 해제하는 것보다 하나의 파일을 압축 해제하고 즉시 처리하는 것이 더 빠를 수 있습니다. 위와 같이 dir 핸들러를 설정하고 dir로 추출합니다.

GNU Parallel을 dir 프로세서로 사용하는 것은 GNU Parallel을 큐 시스템/배치 관리자로 사용하는 것과 동일한 제한 사항이 있습니다.

답변2

무한 루프+의 경우 wait_for_IN_folder_changed,포함도움이 될 수도 있습니다.

AFAIK, "병렬 프로세스" 및 "멀티스레딩"은 매우 다른 것이며, 주어진 바이너리를 수정하거나 다시 컴파일할 수 없다는 점을 고려하면 남은 유일한 옵션은 병렬 처리입니다. 이를 달성하는 방법에는 여러 가지가 있습니다.

  • 기본:tshark [options] &
  • 일부 더 높은 수준의 구조물매개변수
  • 또는 특수 도구(예:GNU 병렬

참고: "incrond"를 사용할 때는 필요하지 않을 수도 있습니다(오랫동안 사용하지 않았습니다...).

관련 정보