Tôi dự định lưu trữ một số phiên bản của cùng một ứng dụng web cho khách hàng sử dụng systemd
. Tôi muốn có thể stop
và start
từng trường hợp khách hàng sử dụng systemd
, cũng như coi toàn bộ tập hợp các trường hợp khách hàng là một dịch vụ duy nhất có thể dừng lại và bắt đầu cùng nhau.
systemd
dường như cung cấp các khối xây dựng mà tôi cần sử dụng PartOf
và các tệp đơn vị mẫu, nhưng tôi đã dừng dịch vụ mẹ, dịch vụ khách hàng con không bị dừng. Làm thế nào tôi có thể làm cho điều này làm việc với systemd? Đây là những gì tôi có cho đến nay.
Tệp đơn vị mẹ , 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
Tệp mẫu đơn vị có tên app@.service
, được sử dụng để tạo phiên bản khách hàng:
[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
Tập lệnh của tôi (Bằng chứng về khái niệm chỉ in ra tệp nhật ký trong một vòng lặp):
#!/bin/bash
# Just a temporary code to fake a full daemon.
while :
do
echo "The App PoC loop for $@"
sleep 2;
done
Để chứng minh khái niệm, tôi đã có các tệp đơn vị systemd ~/.config/systemd/user
.
Sau đó tôi khởi động cha mẹ và một thể hiện dựa trên mẫu (sau systemctl --user daemon-reload
):
systemctl --user start app
systemctl --user start app@customer.service
Từ việc sử dụng journalctl -f
tôi có thể thấy rằng cả hai đã bắt đầu và cá thể khách hàng tiếp tục chạy. Bây giờ tôi hy vọng việc đóng cửa cha mẹ sẽ ngăn chặn đứa trẻ (vì tôi đã sử dụng PartOf
), nhưng nó không. Ngoài ra, bắt đầu cha mẹ cũng không bắt đầu đứa trẻ như mong đợi.
systemctl --user stop app
Cảm ơn!
(Tôi đang sử dụng Ubuntu 16.04 với systemd 229).
Requires=
thay thế?