synit/notes/control-commands.md

2.4 KiB

title
System control commands

systemctl

Commands generally accept patterns to select subsets of the set of all units.

  • list-units

  • list-sockets

  • list-timers

  • is-active (predicate over units)

  • is-failed

  • status

  • show

  • cat (introspection on source files for units)

  • help (this is interesting!)

  • list-dependencies

  • start

  • stop

  • reload ("please reload your configuration" - even though we are mostly reactive, most services won't be, and sometimes config in files exists etc)

  • restart (stop (if running) and then start (unconditionally))

  • try-restart (if running, stop and then start)

  • reload-or-restart, try-reload-or-restart

  • isolate (effectively set a new "supergoal", removing all others. nb AllowIsolate flag)

  • kill

  • clean (remove various cache/state/config/log data)

  • freeze, thaw

  • set-property (for us, change a config .pr file; no --runtime equivalent, though)

  • reset-failed (resets the state variables of the supervisor)

  • (several others)

Enable vs start.

Enable: --system, --user, --runtime, --global: various scopes for enabling a unit.

Container management.

Job management. (It has a job queue!)

Environment management for spawned services.

daemon-reexec, serializes state for an upgrade

System lifecycle: startup -> running -> (shutdown | (maintenance -?-> running))

At shutdown or sleep, "inhibitor locks" exist. The action can respect or ignore these. Interactive shutdown/sleep requests default to respecting; non-interactive, to ignoring.

isolate targets:

  • default
  • rescue
  • emergency
  • halt
  • poweroff
  • reboot
  • suspend
  • hibernate
  • hybrid-sleep
  • suspend-then-hibernate

switch-root

Service unit configuration

https://www.freedesktop.org/software/systemd/man/systemd.service.html

Service templates: can take a single argument to become instantiated.

If a service unit config file doesn't exist, falls back to looking for an init script and synthesizes a unit on the fly.

Default dependencies:

  • requires sysinit.target
  • starts after sysinit.target
  • starts after basic.target
  • conflicts with shutdown.target
  • shuts down before shutdown.target (?)

"slice units"? Oh ok, hierarchical supervision... and configuration of whole branches of the tree.

Service lifecycle:

  • states: active, activating, deactivating, dead, inactive, starting, ... more?

Options:

  • Type (it's complicated)