Đơn vị hẹn giờ systemd có bỏ qua lần chạy tiếp theo nếu quá trình chưa kết thúc?


18

Tôi muốn sử dụng systemd để chạy lệnh cứ sau 5 phút. Tuy nhiên, có một rủi ro là đôi khi nhiệm vụ có thể mất hơn 5 phút để chạy. Tại thời điểm đó, systemd sẽ bắt đầu phiên bản thứ hai của lệnh tức là tôi sẽ kết thúc với 2 tiến trình đang chạy chứ?

Có thể nói systemd không bắt đầu quá trình thứ hai nếu lần đầu tiên chưa hoàn thành? Nếu không, một số cách giải quyết tốt là gì?

Lưu ý: Tôi hy vọng câu trả lời là "Đó là hành vi mặc định. Nó không phải là tài liệu." Nếu đây là tình huống, ai đó có thể cho tôi biết cách gửi lỗi chống lại tài liệu của họ không?

Lưu ý: Cron có một vấn đề tương tự được thảo luận trong /unix//a/173928/11244 . Tôi đang tìm hệ thống tương đương.

Câu trả lời:


27

Đây là hành vi mặc định (và duy nhất). Nó không được ghi lại rõ ràng, nhưng được ngụ ý bởi logic hoạt động của systemd.

systemd.timer (5) đọc:

Đối với mỗi tệp hẹn giờ, phải tồn tại tệp đơn vị phù hợp, mô tả đơn vị sẽ kích hoạt khi hết giờ .

lần lượt systemd (1) mô tả khái niệm trạng thái đơn vị và chuyển tiếp giữa chúng:

Các đơn vị có thể là "hoạt động" (có nghĩa là bắt đầu, bị ràng buộc, được cắm, ..., tùy thuộc vào loại đơn vị, xem bên dưới) hoặc "không hoạt động" (có nghĩa là dừng, không gắn kết, không được cắm, ...), cũng như trong quá trình được kích hoạt hoặc hủy kích hoạt , tức là giữa hai trạng thái (các trạng thái này được gọi là "kích hoạt", "hủy kích hoạt").

Điều này có nghĩa là việc kích hoạt bộ hẹn giờ dẫn đến "kích hoạt" thiết bị phù hợp, tức là quá trình chuyển đổi sang trạng thái "hoạt động".

Nếu đơn vị phù hợp đã "hoạt động" tại thời điểm "kích hoạt" (đối với đơn vị dịch vụ, điều này có nghĩa là "quy trình chính vẫn đang chạy", trừ khi đơn vị dịch vụ có Type=oneshotRemainAfterExit=true), rõ ràng là sẽ không có hành động nào Lấy.


Bạn có thể làm rõ "dịch vụ oneshot" không? Theo quan điểm của tôi, dịch vụ "oneshot" không nên chạy một bản sao khác trong mọi trường hợp (manpage: process phải thoát trước khi systemd bắt đầu các đơn vị theo dõi)
Gima

1
@Gima một đơn vị oneshot không có bất kỳ tham số bổ sung nào được coi là "kích hoạt" trong khi quy trình ban đầu của nó đang chạy và trở thành "không hoạt động" khi thoát. Tại thời điểm này, một kích hoạt khác có thể kích hoạt lại đơn vị đó.
intelfx

1
@Gima ... tuy nhiên, một đơn vị oneshot RemainAfterExit=truesẽ vẫn "hoạt động" khi quá trình ban đầu của nó thoát, do đó, các kích hoạt tiếp theo của bộ hẹn giờ sẽ bị bỏ qua trừ khi quản trị viên vô hiệu hóa (dừng) đơn vị đó hoặc bị tắt bởi âm phụ thuộc.
intelfx

1
Tôi tiếp tục nhận được đại diện như mọi người mời này. Tôi hy vọng systemd không làm rõ tài liệu của họ.
TomOnTime

1
Đây hiện là một phần của tài liệu systemd - Note that in case the unit to activate is already active at the time the timer elapses it is not restarted, but simply left running. There is no concept of spawning new service instances in this case. freedesktop.org/software/systemd/man/systemd.timer.html
Sam
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.