Tôi đã đọc trang quản trị dịch vụ systemd một vài lần, nhưng tôi vẫn không thể tìm ra một mẫu systemd cơ bản:
Tôi muốn chạy quy trình khởi động một lần (như thùng chứa docker hoặc định dạng ổ đĩa) khi khởi động, thành công để hoàn thành. Nhưng nếu tôi sử dụng Type = oneshot cho điều đó, thì tôi không thể sử dụng Restart = on-fail và nếu thất bại, thì nó sẽ không thử lại công việc. Tôi có thiếu một cái gì đó rõ ràng ở đây?
Tôi cũng đã thử cài đặt Type = Simple với Restart = on-fail, nhưng trong nhiều trường hợp tôi cần hành vi sau (từ trang chủ) mà các dịch vụ oneshot đưa ra:
Hành vi của oneshot tương tự như đơn giản; tuy nhiên, quá trình này phải thoát ra trước khi systemd bắt đầu các đơn vị tiếp theo.
Cập nhật:
Restart=
bằng cách đặt FailureAction=[self.unit]
(thay thế [self.unit] bằng tên của đơn vị). Đó là loại hacky, nhưng ít nhất là rõ ràng và đủ dễ để làm theo.
FailureAction
có cùng các giá trị như StartLimitAction
, và tất cả ngoại trừ none
kích hoạt tắt một loại nào đó.
Restart
và góimy_cmd
như thế này:ExecStart=/bin/sh -c 'while ! my_cmd; do sleep 1; done'
cùng với một sốTimeoutStartSec
giá trị hợp lý .