Skip to main content

RestartPolicy

Struct RestartPolicy 

Source
pub struct RestartPolicy { /* private fields */ }
Expand description

The restart-on-failure policy, and the bound on how fast it may retry.

05-infrastructure.md item 3: “set a restart-on-failure policy with bounded delay”. Both halves matter and they are different requirements. A service that does not come back after a crash defeats Journey 5; a service that comes back instantly, forever, turns one bad configuration into a fork bomb against GitHub’s rate limit. So the delay has a floor as well as a ceiling, and the floor is what does not restart-loop faster than that bound is measured against.

Implementations§

Source§

impl RestartPolicy

Source

pub const MIN_DELAY: Duration

The shortest delay this will accept.

One second is not a tuning preference. Below it, launchd’s own throttle and systemd’s start-limit logic both take over and the configured number stops being the number in force, so a policy under this floor would be a value service status reported and the platform ignored.

Source

pub const MAX_DELAY: Duration

The longest delay this will accept. Past five minutes an operator watching a restart would reasonably conclude the service is simply gone.

Source

pub const DEFAULT_DELAY: Duration

What service install uses when nothing is said.

Source

pub const DEFAULT_RESET_AFTER: Duration

How long the service must stay up before its failure count is forgotten.

Source

pub fn new(delay: Duration, reset_after: Duration) -> Result<Self, ServiceError>

§Errors

ServiceError::RestartDelay when delay is outside RestartPolicy::MIN_DELAY..=RestartPolicy::MAX_DELAY, or when reset_after is not longer than delay — a reset window shorter than the delay can never elapse between two restarts, so the failure count would reset on every attempt and no start-limit could ever trip.

Source

pub const fn delay(&self) -> Duration

How long the service manager waits before restarting a failed service.

Source

pub const fn reset_after(&self) -> Duration

How long the service must run before its failure count resets.

Source

pub const fn effective_delay(&self, kind: DefinitionKind) -> Duration

The delay a given manager can actually express.

Three of the four take seconds and enforce exactly what they are given. Windows Task Scheduler does not: RestartOnFailure/Interval is expressed in whole minutes with a one-minute floor, and it rejects the registration outright rather than rounding — PT15S comes back as “The task XML contains a value which is incorrectly formatted or out of range”, which is how this was found.

So the interval is rounded up, never down, and never below one minute. The direction is the point: the requirement is that the service “does not restart-loop faster than that bound”, and a delay longer than the configured one still satisfies it, while a shorter one would not. service status reports the difference as a note so that an operator reading 15s in the record and 60s from the manager is told why rather than left to wonder.

Trait Implementations§

Source§

impl Clone for RestartPolicy

Source§

fn clone(&self) -> RestartPolicy

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for RestartPolicy

Source§

impl Debug for RestartPolicy

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for RestartPolicy

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Display for RestartPolicy

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Eq for RestartPolicy

Source§

impl PartialEq for RestartPolicy

Source§

fn eq(&self, other: &RestartPolicy) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for RestartPolicy

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more