여러 프로세스(파이썬, 노드 등)를 실행해야 하는 웹사이트가 있습니다. 현재 해당 프로세스를 쉽게 시작하고 중지할 수 있도록 시스템 서비스가 생성되어 있습니다. 필요한 모든 프로세스를 백그라운드 프로세스로 시작하는 시작 스크립트를 만들었습니다( &
명령 끝에 추가).
이로 인해 모든 프로세스가 단일 스크립트에서 시작되기 때문에 무언가 충돌이 발생할 때 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
일부 사이트가 나머지 사이트와 비교하여 비표준 단위 설정이 필요한 경우 드롭인을 사용하세요.
[email protected]
– 공통 템플릿[email protected]/overrides.conf
– 클라이언트 1만을 위한 추가 매개변수
템플릿, 드롭인 및 %i와 같은 확장은 다음에 설명되어 있습니다.systemd.unit(5).