Tôi có một ứng dụng java với 4 tiến trình đang chạy (trên Ubuntu 20.04LTS), tham khảo hình bên dưới. Dịch vụ 1 bắt đầu trước 2+, Dịch vụ 2 cũng sẽ bắt đầu dịch vụ 3 và 4.
Tôi đã thiết lập 1 và 2 đơn giản và hoạt động.
phụ thuộc dịch vụ, dịch vụ 2 bắt đầu dịch vụ 3 và 4
Tuy nhiên, dịch vụ 3 và 4 có thể dừng/khởi động lại độc lập với dịch vụ 2. Có cách nào để triển khai điều này vào định nghĩa dịch vụ app-service4.service không?
tôi đã xem bài đăng trên blog mô tả một trường hợp tương tự, vì vậy, dựa trên cơ sở đó, tôi nghĩ việc xác định dịch vụ 3 và 4 bằng "PartOf" dịch vụ 2 có thể là một cách, nhưng làm thế nào để dịch vụ 3 và 4 hiểu rằng dịch vụ 2 đã bắt đầu?
Dưới đây là dịch vụ2.service
[Đơn vị]
Mô tả=Dịch vụ 2
Sau=service1.service
[Dịch vụ]
ExecStart=/usr/local/bin/service2.sh bắt đầu
ExecStop=/usr/local/bin/service2.sh dừng
[Cài đặt]
WantedBy=default.target
Sau khi khởi động, trạng thái trên dịch vụ hiển thị CGroup như bên dưới (pid và tên, v.v. được đơn giản hóa)
/system.slice/service2.service
|- 123 /bin/sh /usr/local/bin/service2.sh bắt đầu
|- 124 java dịch vụ2
|- 125 java dịch vụ3
|- 126 java dịch vụ4
Vậy làm cách nào để thêm một dịch vụ3.service cho phép tôi gỡ xuống/khởi động lại dịch vụ3 mà không chấm dứt dịch vụ2? Dưới đây là nỗ lực của tôi không thể hiểu được dịch vụ2 đang chạy.
[Đơn vị]
Mô tả=Dịch vụ 3
PartOf=service2.service
[Dịch vụ]
ExecStart=/usr/local/bin/service3.sh bắt đầu
ExecStop=/usr/local/bin/service3.sh dừng
[Cài đặt]
WantedBy=default.target
Với thiết lập này sau khi service2 được bắt đầu, "systemctl status service2" hiển thị các quy trình service2-servic4 như đã đề cập ở trên và "systemctl status service 3" hiển thị là "không hoạt động (đã chết)". Nỗ lực khởi động dịch vụ 3 (systemctl start service3) kết thúc giống như vậy (vì nó đang chạy, lệnh bắt đầu kết thúc khi lệnh dừng được thực thi). Nếu tôi thử khởi động lại, nó sẽ bắt đầu như một dịch vụ riêng biệt .
Tôi muốn trình nền hiểu rằng quy trình trong dịch vụ-2 thực sự là dịch vụ-3, do đó dịch vụ-3 sẽ xuất hiện dưới dạng đang chạy. Điều này có thể không?
Nếu không - có cách giải quyết nào để cho phép xử lý riêng các dịch vụ không?