여러 프로세스가 필요한 시스템 서비스를 관리하는 방법은 무엇입니까?

여러 프로세스가 필요한 시스템 서비스를 관리하는 방법은 무엇입니까?

여러 프로세스(파이썬, 노드 등)를 실행해야 하는 웹사이트가 있습니다. 현재 해당 프로세스를 쉽게 시작하고 중지할 수 있도록 시스템 서비스가 생성되어 있습니다. 필요한 모든 프로세스를 백그라운드 프로세스로 시작하는 시작 스크립트를 만들었습니다( &명령 끝에 추가).

이로 인해 모든 프로세스가 단일 스크립트에서 시작되기 때문에 무언가 충돌이 발생할 때 systemd의 자동 다시 시작 기능을 사용할 수 없습니다.

제가 생각할 수 있는 한 가지 잠재적인 해결책은 각 프로세스에 대한 서비스를 만든 다음 이를 마스터 서비스를 만들어 모두 함께 연결하는 것입니다 Requires. 나는 이것을 좋아하지 않습니다. 왜냐하면 내가 실행하고 싶은 이 웹사이트의 모든 환경에 대해 4-5개의 서비스를 만들어야 한다는 뜻이기 때문입니다.

여러 프로세스를 시작하고 각 프로세스를 개별적으로 모니터링하는 서비스를 쉽게 정의할 수 있는 방법이 있습니까?

답변1

여러 개 만들기주형서비스는 @다음과 같이 이름이 지정됩니다.

템플릿을 사용하면 각 웹 사이트에 대해 명명된 인스턴스를 시작할 수 있습니다.

systemctl start [email protected] [email protected]
systemctl start [email protected] [email protected]

%i이러한 템플릿 단위 내에서 인스턴스 이름(이 예에서는 "clientone")을 참조하는 데 사용할 수 있습니다 . 따라서 "기본" 단위(서비스 또는 대상)는 다음을 가질 수 있습니다.

[Unit]
Requires=pythonthingy@%i.service
...
[Service]
Environment="DOCROOT=/var/www/%i"

각 사이트에 여러 매개변수가 필요한 경우 파일에서 해당 매개변수를 로드할 수 있습니다.

[Service]
EnvironmentFile=/etc/someconfigdir/%i.conf

일부 사이트가 나머지 사이트와 비교하여 비표준 단위 설정이 필요한 경우 드롭인을 사용하세요.

템플릿, 드롭인 및 %i와 같은 확장은 다음에 설명되어 있습니다.systemd.unit(5).

관련 정보