67 lines
3.5 KiB
SYSTEMD
67 lines
3.5 KiB
SYSTEMD
[Unit]
|
|
Description=Network UPS Tools - device driver for %I
|
|
After=local-fs.target
|
|
|
|
# Note: If the "Before" line below is uncommented, the target unit
|
|
# would only become initialized after the driver units are all in
|
|
# a final state (active, failed, ...) and would allow nut-server
|
|
# (upsd) to start up and represent those devices on the network.
|
|
# With this constraint commented away, the nut-server should start
|
|
# earlier, but may initially report some devices as Not connected
|
|
# (they should appear when drivers complete their initialization -
|
|
# e.g. snmp walks of large MIBs can take a while):
|
|
#Before=nut-driver.target
|
|
|
|
# Propagate stopping of the target:
|
|
PartOf=nut-driver.target
|
|
|
|
# Note: The choice of "network.target" allows to schedule this unit
|
|
# roughly when the network stack of this OS is ready (e.g. that the
|
|
# subsequent `upsd` will have a `0.0.0.0` or a `localhost` to bind
|
|
# to); however this target does not ensure availability of a real
|
|
# connection or final IP addresses. Drivers that require network as
|
|
# a media for interaction with UPSes (snmp-ups, netxml-ups, ipmi etc.)
|
|
# may want to extend this unit with `Requires=network-online.target`
|
|
# instead. Also note that *generally* this should not be a problem,
|
|
# since the drivers have a few retries with timeouts during startup,
|
|
# and typically by the time the box gets an IP address, the driver
|
|
# is still retrying to start and will succeed.
|
|
# Extending the unit does not require *this* file to be edited, you
|
|
# can instead drop in an additional piece of configuration, e.g. add
|
|
# a `/etc/systemd/system/nut-driver@.service.d/network.conf` with:
|
|
# [Unit]
|
|
# Requires=network-online.target
|
|
# After=network-online.target
|
|
# If your `upsd` requires specific IP addresses to be available before
|
|
# starting, a `/etc/systemd/system/nut-driver.target.d/network.conf`
|
|
# can be used in a similar manner.
|
|
# Finally note that "nut-driver-enumerator.service" should take care of this.
|
|
|
|
[Service]
|
|
EnvironmentFile=-@CONFPATH@/nut.conf
|
|
SyslogIdentifier=%N
|
|
ExecStart=/bin/sh -c 'NUTDEV="`@NUT_LIBEXECDIR@/nut-driver-enumerator.sh --get-device-for-service %i`" && [ -n "$NUTDEV" ] || { echo "FATAL: Could not find a NUT device section for service unit %i" >&2 ; exit 1 ; } ; @SBINDIR@/upsdrvctl start "$NUTDEV"'
|
|
ExecStop=/bin/sh -c 'NUTDEV="`@NUT_LIBEXECDIR@/nut-driver-enumerator.sh --get-device-for-service %i`" && [ -n "$NUTDEV" ] || { echo "FATAL: Could not find a NUT device section for service unit %i" >&2 ; exit 1 ; } ; @SBINDIR@/upsdrvctl stop "$NUTDEV"'
|
|
# Restart really always, do not stop trying:
|
|
StartLimitInterval=0
|
|
Restart=always
|
|
# Protract the "hold-off" interval, so if the device connection is
|
|
# lost, the driver does not reapidly restart and fail too many times,
|
|
# and then systemd would keep the unit failed without further retries.
|
|
# Notably, this helps start "dummy-ups" drivers retranslating local
|
|
# devices (so getting a chicken-and-egg problem for driver-upsd-driver
|
|
# orderly series of initializations). More details in NUT issue #779.
|
|
RestartSec=15s
|
|
Type=forking
|
|
# Note: If you customize the "maxstartdelay" in ups.conf or in your
|
|
# NUT compilation defaults, so it exceeds the default systemd unit
|
|
# startup timeout (typically 90 sec), then make sure to set a slightly
|
|
# longer systemd timeout for the nut-driver unit instances. You can
|
|
# do this by populating a drop-in configuration, so it is not later
|
|
# overwritten by updates to your NUT package -- create a dir+file:
|
|
# /etc/systemd/system/nut-driver@.service.d/timeout.conf with lines:
|
|
# [Service]
|
|
# TimeoutStartSec=190s
|
|
|
|
[Install]
|
|
WantedBy=nut-driver.target
|