현재 상황
저는 리눅스 서버(Arch)를 운영하고 있습니다. 다음과 같이 실행되는 서버 응용 프로그램이 있습니다.
run_server filename --port=xxxx
나는 시스템 서비스 파일을 작성했습니다. 각각은 특정 포트의 특정 파일에 대한 프로세스를 활성 상태로 유지합니다. 새 파일을 제공하고 싶을 때 systemd 서비스 파일을 복사합니다. 편집하세요; 새로운 포트를 제공하십시오. 새 서비스를 활성화/시작합니다.
여러 사람들이 팀을 이루어 파일을 추가하고 제거하는 경우가 많기 때문에 이는 수동 작업이 많이 필요합니다.
요구
파일 디렉토리가 있는 경우
directory/firstfile
directory/secondfile
....
각 파일에 대해 단일 프로세스를 유지하고 싶습니다.
run_server firstfile --port=9001
run_server secondfile --port=9002
...
파일이 디렉터리에서 제거되면 프로세스가 중지되어야 합니다. 파일이 디렉터리에 추가되면 새 프로세스가 시작되어야 합니다.
어떻게 이를 달성할 수 있나요?
답변1
좋아요, 저는 두 명의 댓글 작성자의 조언을 결합했습니다.
시스템 템플릿 단위 파일 생성( )
/etc/systemd/system/[email protected]
[Service] Type=simple ExecStart=/../run_server %i ...
/etc/systemd/system/sync_server_units.path
디렉터리를 모니터링하는 시스템 경로 서비스( )를 만듭니다.[Path] PathModified=/path/to/directory ...
/etc/systemd/system/sync_server_units.service
그러면 간단한 run_once인 ( )가 시작됩니다 .[Service] Type=oneshot ExecStart=/../sync_server_units
sync_server_units
마지막으로 디렉토리의 내용을 의 출력과 비교systemctl list-units --all 'run_server@*'
하고 필요에 따라 템플릿 서비스를 활성화/시작/중지/비활성화하는 스크립트( )가 있습니다 .
지금까지 잘 작동합니다!