를 사용하는 고객을 위해 동일한 웹 앱의 여러 인스턴스를 호스팅 할 계획 systemd
입니다. 고객 인스턴스 의 전체 컬렉션을 중지하고 함께 시작할 수있는 단일 서비스로 취급 할뿐 아니라 각 고객 인스턴스를 사용하여 각 고객 인스턴스를 사용 stop
하고 싶습니다 .start
systemd
systemd
사용하는 데 필요한 빌딩 블록 PartOf
과 템플릿 단위 파일 을 제공하는 것처럼 보이지만 상위 서비스를 중지하면 하위 고객 서비스가 중지되지 않습니다. systemd에서 어떻게 작동합니까? 여기까지 내가 가진 것입니다.
부모 단위 파일 app.service
:
[Unit]
Description=App Web Service
[Service]
# Don't run as a deamon (because we've got nothing to do directly)
Type=oneshot
# Just print something, because ExecStart is required
ExecStart=/bin/echo "App Service exists only to collectively start and stop App instances"
# Keep running after Exit start finished, because we want the instances that depend on this to keep running
RemainAfterExit=yes
StandardOutput=journal
app@.service
고객 인스턴스를 작성하는 데 사용되는 단위 템플릿 파일
[Unit]
Description=%I Instance of App Web Service
[Service]
PartOf=app.service
ExecStart=/home/mark/bin/app-poc.sh %i
StandardOutput=journal
내 app-poc.sh
스크립트 (루프에서 로그 파일로 인쇄하는 개념 증명) :
#!/bin/bash
# Just a temporary code to fake a full daemon.
while :
do
echo "The App PoC loop for $@"
sleep 2;
done
개념 증명을 위해 시스템 단위 파일이에 ~/.config/systemd/user
있습니다.
그런 다음 템플릿을 기반으로 부모 및 인스턴스를 시작합니다 ( systemctl --user daemon-reload
).
systemctl --user start app
systemctl --user start app@customer.service
사용하여 journalctl -f
시작한 것과 고객 인스턴스가 계속 실행되고 있음을 알 수 있습니다. 이제 II는 부모를 종료하면 아이를 멈출 것으로 예상 PartOf
하지만 ( 사용했기 때문에 ) 그렇지 않습니다. 또한 부모를 시작해도 자식이 예상대로 시작되지 않습니다.
systemctl --user stop app
감사!
(시스템 229와 함께 Ubuntu 16.04를 사용하고 있습니다).
Requires=
대신 사용할 필요가 없습니까?