다음과 같은 시스템 서비스를 작성하는 것이 가능합니까?
[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
. 인스턴스를 다른 대상과 연결하려는지 여부를 템플릿에 표시합니다.