RestartSec dường như chỉ được sử dụng nếu dịch vụ cụ thể đó là dịch vụ được khởi động lại thông qua lệnh khởi động lại systemctl.
Ví dụ: tôi có hai dịch vụ A và B.
[Unit]
Requires=network-online.target
[Service]
ExecStart=A-stuff
Restart=always
và
[Unit]
Requires=A.service
After=A.service
[Service]
ExecStart=B-stuff
Restart=always
RestartSec=30
Nếu bạn thực hiện khởi động lại hệ thống B, nó hoạt động như mong đợi ... nhưng nếu bạn thực hiện khởi động lại hệ thống A, cả hai dịch vụ đều bị dừng và ngay lập tức bắt đầu lại, không chậm trễ.
Systemd rõ ràng chỉ sử dụng các giá trị cấu hình cho một dịch vụ bạn chỉ định và bỏ qua chúng cho bất kỳ phụ thuộc nào.
Điều này không phổ biến như nó có vẻ. Nếu B nói chuyện với một máy chủ từ xa, việc khởi động và dừng nhanh chóng có thể thất bại do đầu cuối từ chối máy khách. Nhưng việc khởi động lại A trực tiếp sẽ xảy ra bất cứ khi nào A được cập nhật mà không thay đổi thành B.
Bạn có thể cũng có thể giải quyết vấn đề này bằng cách thêm độ trễ vào A, nhưng bạn KHÔNG CẦN làm điều này, vì nó phá vỡ sự cô lập đối tượng bằng cách làm cho A biết về B khi nó không phụ thuộc.
systemctl stop myservice && sleep 3 && systemctl start myservice