Runlevels vs Targets
Unlike the old init system with different runlevels, Systemd defines sets of services to run inside targets.
Instead of using
# systemctl isolate graphical.target
# systemctl isolate multi-user.target
Systemd keeps tracks of service logs.
Clear all the entries by running:
# journalctl --vacuum-time=1seconds
# journalctl --vacuum-size=1M
Limiting Log Sizes
/etc/systemd/journald.conf and define a value for
Creating a Service
Suppose you have a program that you want started when the system boots. To have systemd start the program as a service, create a new service file in
/etc/systemd/system containing something like:
# cat /etc/systemd/system/mag-read.service [Unit] Description=Mag card reader [Install] WantedBy=multi-user.target [Service] ExecStart=/root/scripts/mag.sh Restart=always
This service file will execute
mag.sh which will start a process that sits and waits for input from a mag-strip card reader and will automatically restart it if it stops.
Once the file has been created, reload systemd and enable the service:
# systemctl daemon-reload # Reloads the service files so systemd is aware of the new one # systemctl enable mag-read
SystemV-like Init Scripts
If you have custom packages that make use of the old SystemV startup scripts, you can use the following files to make use of such scripts.
[Unit] Description=Custom SystemV-like Startup After=network.target ConditionFileIsExecutable=/usr/local/sbin/custom-startup-initd [Service] Type=oneshot ExecStart=/usr/local/sbin/custom-startup-initd TimeoutSec=0 StandardOutput=tty RemainAfterExit=yes SysVStartPriority=99 [Install] WantedBy=multi-user.target
A few things of interest.
ConditionFileIsExecutablewill only run the script if it's executable. It basically does a
test -xon the file before this continues.
RemainAfterExitwill cause systemd to show the service as active even after the script has finished execution.
#!/bin/sh StartupDir="/usr/local/boot/startup" # Run all scripts starting with 'S' for i in `ls $StartupDir/S*` ; do ScriptName=`basename $i` sh $StartupDir/$ScriptName done # Success exit code. exit 0
Make the directory:
# mkdir -p /usr/local/boot/startup/
Then place your scripts in the startup directory starting with the letter 'S'.
Enable the new service by running:
# systemctl enable startup # systemctl start startup
# systemctl status startup.service