我计划为使用的客户托管同一个Web应用程序的多个实例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
为了进行概念验证,我在中获取了systemd单位文件~/.config/systemd/user
。
然后,我基于模板(在之后systemctl --user daemon-reload
)启动父对象和实例:
systemctl --user start app
systemctl --user start app@customer.service
通过使用,journalctl -f
我可以看到已经启动并且客户实例继续运行。现在,我希望关闭父母会停止孩子(因为我曾经使用过PartOf
),但事实并非如此。另外,启动父级也不会像预期的那样启动子级。
systemctl --user stop app
谢谢!
(我正在将Ubuntu 16.04与systemd 229配合使用)。
Requires=
吗?