DRY 원칙에 따라 약간 다른 시스템 구성 을 만드는 것보다 다른 이름을 가진 시스템 구성에 대한 심볼릭 링크나 하드 링크를 사용하는 것이 좋습니다 myservice1.service
.myservice2.service
$0
SysV initscripts를 사용하면 시작 스크립트의 이름을 결정하는 데 사용할 수 있고 .conf
Upstart 파일을 사용하는 자동 변수가 있지만 $UPSTART_JOB
systemd 문서에서 비슷한 것을 검색했지만 성공하지 못했습니다. 어떤 아이디어가 있나요?
답변1
Systemd에는 단일 단위 파일이 인수를 수락하고 다른 인스턴스를 시작할 수 있는 템플릿이 있습니다. 전형적인 예는 getty입니다.
~ systemctl cat [email protected] | grep Exec
ExecStart=-/sbin/agetty --noclear %I $TERM
이렇게 하면 systemctl start getty@tty7
서비스를 시작하기 전에 systemd로 대체됩니다 %I
.tty7
귀하의 파일에서 이를 사용하는 것이 더 쉬울 것입니다 myservice.service
. 이름을 지정하고 [email protected]
명령줄에서 or 를 적절히 사용하십시오 %I
.%i
ExecStart
관련된:
답변2
%p
(이스케이프됨) 또는 (이스케이프되지 않음) .from %P
과 동일$UPSTART_JOB
Systemd 단위 및 단위 파일 이해:
관련 정보가 포함된 인스턴스 단위를 해석할 때 대체되는 보다 일반적인 지정자는 다음과 같습니다.
%n
: 전체 결과 단위 이름이 템플릿 파일에 나타날 때마다 삽입됩니다.%N
: 위와 동일하지만 모든 이스케이프(예: 파일 경로 패턴에 있는 것과 같은)가 취소됩니다.%p
: 유닛 이름 접두어를 나타냅니다.@
단위명칭 중 기호 앞에 오는 부분 입니다 .%P
: 위와 동일하지만 이스케이프가 반대로 수행됩니다.%i
@
: 인스턴스 단위 뒤에 오는 식별자인 인스턴스 이름을 나타냅니다. 이는 동적임을 보장하기 때문에 가장 일반적으로 사용되는 지정자 중 하나입니다. 이 식별자를 사용하면 구성에 중요한 식별자를 사용할 수 있습니다. 예를 들어 서비스가 실행될 포트를 인스턴스 식별자로 사용할 수 있으며 템플릿은 이 지정자를 사용하여 포트 사양을 설정할 수 있습니다.%I
: 이 지정자는 위와 동일하지만 이스케이프는 반대입니다.%f
: 이스케이프 처리되지 않은 인스턴스 이름이나 접두사가 붙은 이름으로 대체됩니다/
.%c
: 장치의 제어 그룹을 나타내며/sys/fs/cgroup/systemd/
표준 상위 계층 구조를 제거합니다.%u
: 장치를 실행하도록 구성된 사용자의 이름입니다.%U
: 위와 동일하지만 이름 대신 숫자 UID를 사용합니다.%H
: 이 장치가 실행 중인 시스템의 호스트 이름입니다.%%
: 리터럴 백분율 기호를 삽입하는 데 사용됩니다.
템플릿 파일에서 위 식별자를 사용하면 systemd는 템플릿을 해석하여 인스턴스 단위를 생성할 때 올바른 값을 채웁니다.
신용은 간다무루내 검색 결과를 향상시키는 "템플릿" 참조를 받으세요.