systemd 유형=여러 호출로 분기된 서비스

systemd 유형=여러 호출로 분기된 서비스

다음과 같은 시스템 서비스를 작성하는 것이 가능합니까?

[Service]
Type=forking
ExecStart=forksomething

systemctl --user start forksomething.service첫 번째 호출이 계속 실행되는 동안 두 번째 호출을 허용하시겠습니까?

만들어볼까도 생각했었는데 [email protected], 처음에는 "forksomething@$(date +'%s').service"좀 덜 진부한 걸 원했어요. (편집: 실제로 이것은 심볼릭 링크와 데몬 리로드도 생성해야 하기 때문에 더 나쁩니다.)

답변1

한 번 생성 [email protected]하고 실행하면 systemctl daemon-reload추가 데몬을 다시 로드하지 않고도 systemd원하는 만큼의 서비스를 시작할 수 있습니다 .[email protected]

사실, 당신은 [email protected]실제로서비스 템플릿. 인스턴스 이름의 뒷부분을 @템플릿의 매개변수로 사용할 수 있습니다. 예를 들어, 다음과 같이 서비스를 정의한다면:

[Service]
Type=forking
ExecStart=/usr/local/bin/forksomething "%i"

그런 다음 다음을 실행하십시오.

systemctl daemon-reload
systemctl start [email protected]
systemctl start [email protected]
systemctl start [email protected]

그런 다음 systemd가 명령을 실행합니다 /usr/local/sbin/forksomething 1./usr/local/sbin/forksomething 2/usr/local/sbin/forksomething 3

이 시점부터 부팅할 때마다 처음 두 인스턴스가 계속 시작되도록 하려면 및 라고 말하면 됩니다. 이 명령은 해당 디렉토리에 대한 적절한 심볼릭 링크를 자동으로 생성합니다.systemctl enable [email protected]systemctl enable [email protected]/etc/systemd/system/<whatever>.target.wants/

서비스 템플릿의 인스턴스는 시작을 시도함으로써 간단히 호출됩니다. 심볼릭 링크는 일부 대상 장치와 지속적으로 연결되기를 원하는 경우에만 필요합니다(일반적으로 default.target또는 multi-user.target시작 시 무언가를 시작하려는 경우) Before=some.target. 인스턴스를 다른 대상과 연결하려는지 여부를 템플릿에 표시합니다.

관련 정보