Skip to content

Systemd

Check service status

systemctl status docker

Check runnin service

systemctl | grep -E -i -w 'docker|dockerd'
systemctl list-unit-files | grep -E -i -w 'docker|dockerd'

Start service

systemctl start dockerrm.timer

Enable service to auto start

systemctl enable docker.service

Stop service

systemctl stop docker 

Show jobs

systemctl list-timers --all

Reload list of services

systemctl daemon-reload

Create script job

/etc/systemd/system/dockerrm.service

[Unit]
Description=Delete docker containers created longer than n days

[Service]
Type=oneshot
ExecStart=/usr/local/bin/dockerrm.sh
/etc/systemd/system/dockerrm.timer

[Unit]
Description=Run dockerrm.service on schedule

[Timer]
OnCalendar=Mon..Sun 22:00
Persistent=true

[Install]
WantedBy=timers.target

Reboot machine

systemctl reboot

Set timeout for service stop

If the application takes "forever" to exit, then it's possible that it will block a reboot indefinitely

systemctl edit --full node.service


[Service]
TimeoutStartSec=180


systemctl daemon-reload
systemctl show elasticsearch | grep ^Timeout

Edit original unit, run as dynamic user (do not create user fo service)

systemctl edit --force --full vouch-proxy.service


[Unit]
Description=Vouch Proxy
After=network.targe

[Service]
Type=simple
DynamicUser=yes
WorkingDirectory=/usr/local/bin
ExecStart=/usr/local/bin/vouch-proxy
Restart=on-failure
RestartSec=5
StartLimitInterval=60s
StartLimitBurst=3

[Install]
WantedBy=default.target


systemctl daemon-reload
ps axwwo pid,user:12,group:12,cmd | grep vouch

Disable SMB on Linux host

systemctl stop smbd
systemctl stop nmbd
systemctl mask smbd
systemctl mask nmbd

Systemd Auto boot service

cp /lib/systemd/system/postgresql-9.4.service /etc/systemd/system/postgresql-9.4-5434.service

Systemd start service

systemctl start postgresql-9.4.service

Systemd enable auto-boot service

systemctl enable postgresql-9.4.service

Systemd check if service is enabled (set to boot)

systemctl is-enabled nginx.service

Systemd show auto-boot services

systemctl list-unit-files --type=service

Systemd restart service

systemctl restart postgresql-9.4.service

Systemd show service unit-file

systemctl cat sshd

Systemd edit service unit-file

systemctl edit sshd

Systemd check service is active

systemctl is-active sshd

Systemd unit file installed by packages

/usr/lib/systemd/system/sshd.service

Systemd unit file local configuration

/etc/systemd/system 

Systemd set an environment variable for a systemd service

Use EnvironmentFile= and point it to another configuration file that is only readable by the service account (and users with root access)

I put a configuration file at /etc/my_service/my_service.conf and put my secrets in there:

MY_SECRET=correcthorsebatterystaple

Then in my service unit file, I used EnvironmentFile=:

[Unit]
Description=my_service

[Service]
ExecStart=/usr/bin/python /path/to/my_service.py
EnvironmentFile=/etc/my_service/my_service.conf
User=myservice

[Install]
WantedBy=multi-user.target

SystemD set maximum open files

/etc/systemd/system/redis.service

[Service]
LimitNOFILE=10032
systemctl daemon-reload
systemctl restart redis.service

SystemD Network

networkctl status

SystemD Login

loginctl list-sessions

JournalD

Get service unit logs

journalctl -u docker | tail -50

Get logs since last boot

journalctl -b -r

Journald show service unit logs

journalctl -u docker -r

Journald log rotation config

/etc/systemd/journald.conf

Journald trunkate the logs (remove older)

journalctl --vacuum-size=1024M
journalctl --vacuum-time=7d

ResolveD

SystemD Resolve DNS

resolvectl status

SystemD DNS Stub Resolver

Systemd could list on port 53 for requests

/etc/systemd/resolved.conf

DNSStubListener=yes

In that case /etc/resolv.conf points to 127.0.0.1

/etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf

nameserver 127.0.0.53

Clear DNS cache

systemd-resolve --flush-caches

TimedateD

Set time zone

timedatectl set-timezone Europe/Copenhagen
cat /etc/timezone

SystemD Time

timedatectl status