특정 디렉터리에 지속적으로 다운로드되는 파일을 처리하기 위해 스크립트 기반 도구를 어떻게 실행할 수 있습니까? 나는 지연을 최소화하고 싶고(~1초 정도가 적당함) 스크립트는 자체 무한 루프를 가질 수 있습니다.
나는 다음과 같은 몇 가지 방법을 알고 있습니다.
- 내 스크립트를 사용
.bashrc
하거나 호출하여 자동으로 사용자 로그인.profile
- cron에서 스크립트를 포크하고 이미 실행 중인 경우 무시합니다.
- 어떻게든 초기화 스크립트를 사용하세요(배포판마다 다른 것 같아요)
어떤 방법이 가장 효과적인가요?
답변1
어떻게든 초기화 스크립트를 사용하세요(배포판마다 다른 것 같아요)
물론. 다음은 System 5 rc
스크립트를 전혀 포함하지 않는 체계적인 방식입니다 . 이것은 두 개의 단위입니다. 캡슐화되지 않은 비시스템 단위이기 때문에 삽입됩니다 /etc/systemd/system
. 첫 번째는서비스 단위프로그램을 데몬으로 실행하는 방법을 설명합니다.
# /etc/systemd/system/example-spooler.service [단위] 설명=/var/spool/example/에 있는 프로세스 파일 문서=http://unix.stackexchange.com/questions/203637/ [제공하다] ExecStart=/usr/local/bin/example-spooler /var/spool/example/
이 서비스를 명시적으로 시작하거나 중지할 필요는 없습니다. 이것은경로 활성화. 이것경로 단위systemd 모니터 경로와 찾는 두 번째 단위 파일을 설명합니다.
# /etc/systemd/system/example-spooler.path [단위] Description=/var/spool/example/을 모니터링하고 example-spooler.service를 활성화합니다. 문서=http://unix.stackexchange.com/questions/203637/ [작은 길] DirectoryNotEmpty=/var/spool/example/ [설치하다] WantedBy=다중 사용자.대상
부팅 시 자동으로 시작하려면 를 실행하세요 systemctl preset example-spooler.path
. 즉시 시작하려면 를 실행하세요 systemctl start example-spooler.path
.
추가 읽기
- 레나트 페틀링(2013-10-07).
systemd.path
. 시스템 매뉴얼 페이지. freedesktop.org.
답변2
스크립트가 Linux에서 실행되고 있다고 가정하면 다음을 사용할 수 있습니다.inotify기다려초기화 스크립트에서. 전체 다운로드 트리를 통해 재귀 검색을 수행해야 할 수도 있습니다(옵션 -r
). 모니터링할 각 노드를 기억하세요.최대 1kB의 커널 메모리를 차지할 수 있습니다..
주요 이점inotify이는 비용이 많이 드는 폴링 루프를 방지하기 위한 것입니다. 모니터링되는 디렉터리 트리에서 파일 작업이 발생할 때마다 이벤트를 트리거합니다. 그렇지 않으면 CPU 리소스를 거의 소모하지 않습니다.