Kích hoạt một đơn vị systemd khác để bắt đầu trước khi đơn vị hẹn giờ bắt đầu?


2

Tôi có một RPi3. Vì nó không có đồng hồ phần cứng, tôi có một dịch vụ cho tlsdate đồng bộ hóa thời gian với một máy chủ cục bộ. (Điều này được kích hoạt trên mỗi lần khởi động. Thường xuyên vì việc cắt điện thường xuyên).

Tôi có thêm một bộ đếm thời gian mysync.timer bắt đầu mysync.service đồng bộ hóa lịch của tôi. Cái này dùng OAuth và nếu có sự không phù hợp về thời gian, nó sẽ bị lỗi.

Có cách nào để bắt đầu tlsdate.service trước mysync.service, mỗi lần mysync.service chạy?

Tôi đã xem tài liệu systemd và tìm thấy Before=After=, nhưng tôi không chắc làm thế nào để sử dụng nó với bộ hẹn giờ.


1
Bộ hẹn giờ đơn thuần lịch trình khởi động, nhưng họ không thay đổi cách đơn vị dịch vụ. hành xử khác.
grawity

Câu trả lời:


5

Tất cả bạn cần làm là thêm một AfterWants trong mysync.service:

After=tlsdate.service
Wants=tlsdate.service

Điều này sẽ gây ra tlsdate.service bắt đầu trước mysync.service. Nếu bạn muốn chắc chắn rằng tlsdate hoàn thành trước mysync, bạn có thể muốn chắc chắn tlsdateType=oneshot, trái với mặc định của Type=simple.

Sự khác biệt giữa hai là After Chỉ định thứ tự nếu cả hai được bắt đầu cùng một lúc, trong khi Wants nguyên nhân tlsdate bắt đầu khi nào mysync được bắt đầu. Vì vậy, bạn cần cả hai, để xác định thứ tự và phụ thuộc.


Nếu bạn muốn một sự phụ thuộc cứng, tức là mysync Nên Thất bại nếu tlsdate không thể được bắt đầu, sau đó bạn nên sử dụng Requires:

After=tlsdate.service
Requires=tlsdate.service

Bạn sẽ có thể bỏ qua bộ đếm thời gian hoàn toàn. Bộ hẹn giờ sẽ bắt đầu mysync.service nhưng những gì bạn thực sự muốn là một sự phụ thuộc trong mysync.service cái đó tlsdate.service được bắt đầu trước, bất kể nó được kích hoạt thông qua bộ đếm thời gian hay không.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.