meta data for this page
  •  

This is an old revision of the document!


HowTo

start / stop

systemctl daemon-reload
systemctl start servicename

info/status

# systemctl get-default
multi-user.target
systemd-analyze critical-chain
systemctl --failed

emergency mode

Prevent services from running

If services are defined with DefaultDependencies=no, they will be started unconditionally even in emergency mode, wchich can be wrong.

If mount fails

local-fs.target is configured to go to OnFailure=emergency.target. File /etc/fstab is parsed by systemd-fstab-generator to generate .mount units, which are Required.

To let mounts fail without switching to emergency mode, special attribute are introduced to fstab. http://www.freedesktop.org/software/systemd/man/systemd.mount.html

Debug

Kernel commandline:

systemd.unit=emergency
systemd.log_level=debug systemd.log_target=console console=ttyS0,38400

Enable in u-boot:

setenv bootargs ${bootargs} systemd.unit=emergency.target

Start service when MMC card is inserted

Create directory “dev-mmcblk0.device.wants” and put symlink to service inside it. List of devices:

systemctl --all --full -t device

Configuration

DefaultDependencies

Value for unit DefaultDependencies is set to yes by default. it will add following dependencies:

  • Conflicts=shutdown.target to stop service during shutdown
  • Conflicts=umount.target to umount mounts durign shutdown
  • Requires=basic.target and After=basic.target

Unit Types

  • .service plain service - for running daemons
  • .socket socket listeners - like inetd
  • .device
  • .path filesystem triggers (when file is changed)
  • .mount
  • .automount
  • .swap
  • .target
  • .timer
  • .snapshot
  • .slice
  • .scope

[Unit]

  • Requisite - similar to require, but if not met, service will be not started (fail immediately). Usefull to perform action when removable device is inserted.
  • Requisite=!local-fs.target
  • BindsTo - similar to require, but also declares to stop unit when other units dissapers (aslo nice for removable devices handling)
  • After - start service after other services are started completely.

[Service]

  • Nice=-20
  • IOSchedulingClass=0
  • IOSchedulingPriority=0
  • StandardOutput=tty |none | journal+console

tricks

Condition doesn't skip service, but only service is not started but all requirements (after,before, wants, conflicts) works. So Service is not started but it is still disabling other services by Conflicts definition. If service is not started by Condtiion it is still conflicting

Remove startup console clearing

/etc/systemd/system/getty@tty1.service.d/noclear.conf

[Service]
TTYVTDisallocate=no