디렉토리의 각 파일에 대해 서버를 활성 상태로 유지

디렉토리의 각 파일에 대해 서버를 활성 상태로 유지

현재 상황

저는 리눅스 서버(Arch)를 운영하고 있습니다. 다음과 같이 실행되는 서버 응용 프로그램이 있습니다.

run_server filename --port=xxxx

나는 시스템 서비스 파일을 작성했습니다. 각각은 특정 포트의 특정 파일에 대한 프로세스를 활성 상태로 유지합니다. 새 파일을 제공하고 싶을 때 systemd 서비스 파일을 복사합니다. 편집하세요; 새로운 포트를 제공하십시오. 새 서비스를 활성화/시작합니다.

여러 사람들이 팀을 이루어 파일을 추가하고 제거하는 경우가 많기 때문에 이는 수동 작업이 많이 필요합니다.

요구

파일 디렉토리가 있는 경우

directory/firstfile
directory/secondfile
....

각 파일에 대해 단일 프로세스를 유지하고 싶습니다.

run_server firstfile --port=9001
run_server secondfile --port=9002
...

파일이 디렉터리에서 제거되면 프로세스가 중지되어야 합니다. 파일이 디렉터리에 추가되면 새 프로세스가 시작되어야 합니다.

어떻게 이를 달성할 수 있나요?

답변1

좋아요, 저는 두 명의 댓글 작성자의 조언을 결합했습니다.

  1. 시스템 템플릿 단위 파일 생성( )/etc/systemd/system/[email protected]

    [Service]
    Type=simple
    ExecStart=/../run_server %i
    ...
    
  2. /etc/systemd/system/sync_server_units.path디렉터리를 모니터링하는 시스템 경로 서비스( )를 만듭니다.

    [Path]
    PathModified=/path/to/directory
    ...
    
  3. /etc/systemd/system/sync_server_units.service그러면 간단한 run_once인 ( )가 시작됩니다 .

    [Service]
    Type=oneshot
    ExecStart=/../sync_server_units
    
  4. sync_server_units마지막으로 디렉토리의 내용을 의 출력과 비교 systemctl list-units --all 'run_server@*'하고 필요에 따라 템플릿 서비스를 활성화/시작/중지/비활성화하는 스크립트( )가 있습니다 .

지금까지 잘 작동합니다!

관련 정보