Introduction

Systemd has units (kind of equivalent to sysv init scripts) :-

  • service - manage daemons - start/stop/reload/restart
  • socket - lazy start - each socket has matching service which is started on first connection to socket (like xinetd)
  • target - does nothing - used to group other units to provide a 'sync' point during boot
  • device, mount, automount, slice ... - not covered here

Each unit Y can have dependencies :-

  • Y wants X - Y will 'pull-in' X, but won't fail if X fails to start for any reason
  • Y requires X - as for 'wants X', but Y will fail if X fails to start
  • Y after X / Y before X

All units started together unless order defined :-

  • order is orthagonal to dependencies

Service units

  • service units have one of the following 'type' :-
    • simple - specified command runs in foreground
    • forking - forks a child and exits
    • oneshot - one shot task and exits
    • notify - linked against systemd's sd_notify()

Macros

REGISTER_COMPONENT_WITH_SYSTEMD(COMP,REQUIRES,AFTER,WANTEDBYTAG)
creates a one-shot service unit to start component LCFG component COMP. REQUIRES - units that this component requires to run (optional). AFTER - units that should be started before this component (optional). WANTEDBYTAG - the tag of the unit that this component is wanted by (required). WANTEDBYTAG should be set to 'lcfgmultiuser' if it has the capability to ask for a reboot, or is required by components that may ask for a reboot. It should be set to 'multiusertarget' if it should not be started until after any boot-time reboots have been completed (eg getty, gdm, apacheconf etc).

LCFG_SYSTEMD_UNIT(TAG,RN)
define a unit whose real name is RN. This macro doesn't create a unit file. It is used, with systemd.required_units_{TAG} and systemd.wanted_units_{TAG}, to populate {service}.wants and {service}.requires subdirectories of /etc/systemd/system.

LCFG_SYSTEMD_UNIT_WANTEDBY(TAG,RN,WANTEDBYTAG)
as LCFG_SYSTEMD_UNIT but also adds this unit to systemd.wanted_units resource of unit WANTEDBYTAG.

LCFG_SYSTEMD_UNIT_LINK(TAG,RN,LINK)
define a unit whose real name is RN. This macro creates a link RN, in /etc/systemd/system, to the unit file LINK in /usr/lib/systemd/system.

LCFG_SYSTEMD_UNIT_LINK_WANTEDBY(TAG,RN,LINK,WANTEDBYTAG)
as LCFG_SYSTEMD_UNIT_LINK but also adds this unit to systemd.wanted_units resource of unit WANTEDBYTAG

LCFG targets

  • multi-user.target (as end ‘default’ target)
    • lcfg-multi-user-stable.target
      • lcfg-multi-user.target
        • lcfg-auth.service
        • lcfg-client.service
        • lcfg-updaterpms.service
      • lcfg-rebootcheck.service (after lcfg-multi-user.target)
    • lcfg-clearbootctx.service (after lcfg-multi-user-stable.target)
    • lcfg-cron.service (after lcfg-multi-user-stable.target)
    • lcfg-apacheconf.service (after lcfg-multi-user-stable.target)
    • lcfg-openssh.service (after lcfg-multi-user-stable.target)
    • getty.service (after lcfg-multi-user-stable.target)

Schema

-- Main.ascobie - 2014-08-19


This topic: LCFG > WebHome > SL7PortHome > SystemdDocs
Topic revision: r3 - 2014-10-14 - ascobie
 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2021 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback