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.
FailureActioncó cùng các giá trị như StartLimitAction, và tất cả ngoại trừ nonekích hoạt tắt một loại nào đó.
Restartvà góimy_cmdnhư thế này:ExecStart=/bin/sh -c 'while ! my_cmd; do sleep 1; done'cùng với một sốTimeoutStartSecgiá trị hợp lý .