[Nut-upsdev] RFC: nut and systemd
Michal Hlavinka
mhlavink at redhat.com
Mon Apr 18 14:36:45 UTC 2011
Hi,
you've probably heard about systemd already. In Fedora 15, it's
used as default instead old SysV init system. While there is some
backward compatibility layer, everything is going to be ported from
/etc/init.d/<something> init scripts to systemd's service files
/lib/systemd/system/<something>.service
Unfortunately?, systemd is not 1:1 compatible with old init scripts.
Now (at least in Fedora) we have /etc/init.d/ups init script which
starts a)upsdrvctl, upsd, upsmon OR b)just upsmon - that based on
value in /etc/sysconfig/ups. (btw, I've got complaint recently that in
"server" mode it should be possible to start just upsdrvctl and upsd,
without upsmon.)
systemd "prefers" daemon per service/unit file, so it's not possible
to have the same functionality as is with init script.
1) systemd does not support:
source /etc/sysconfig/ups
if [ "$SERVER" = yes ]; then
/sbin/upsdrvctl...
/.../upsd
/.../upsmon
else
/.../upsmon
fi
because it has it's special syntax.
2) it does not support:
ExecStart=[ "$SERVER" != yes ] || /sbin/upsdrvctl
ExecStart=[ "$SERVER" != yes ] || /.../upsd
ExecStart=/.../upsmon
because it does not use shell
3) it "somehow" supports
ExecStart=/usr/libexec/nut/systemd_helper
and put shell script code from #1 there and handle other stuff myself.
This is somehow ugly solution and despite it is supported, systemd does
not like it (it prefers one not-background-forked daemon per service
file, so it can monitor & other stuff thanks pid of the daemon is pid of
executed process). But - this is only way how to make nut work the
same way as old version. So the question is if it's worth it from long time pov.
4)The systemd's way:
- 3 service files
- one for upsd and one for upsmon. This means SERVER configuration
from /etc/sysconfig/ups goes away.
- two services configured by user (ups.service/nut.service=upsd, nut-monitor.service=upsmon)
- upsdrvctl as on demand service (started before upsd, stoped after upsd)
So, the question is: 3) or 4) ?
Cheers,
Michal
More information about the Nut-upsdev
mailing list