noqqe » blog | sammelsurium | photos | projects | about

systemd

2018-05-30 @ Software, systemd

Ein einzelner Service

Als Beispiel mal der von Grafana, da er sehr schön ist.

[Unit]
Description=Grafana instance
Documentation=http://docs.grafana.org
Wants=network-online.target
After=network-online.target
After=postgresql.service mariadb.service mysql.service

[Service]
EnvironmentFile=/etc/default/grafana-server
User=grafana
Group=grafana
Type=simple
Restart=on-failure
WorkingDirectory=/usr/share/grafana
RuntimeDirectory=grafana
RuntimeDirectoryMode=0750
ExecStart=/usr/sbin/grafana-server                                                  \
LimitNOFILE=10000
TimeoutStopSec=20
UMask=0027

[Install]
WantedBy=multi-user.target

Wie gewohnt… erstmal mit einem einfachen Service interagieren.

systemctl restart/start/stop/status/cat <service>.service

Verzeichnisse

/etc/systemd/system/
/lib/systemd/system/
/usr/lib/systemd/system/

Commands

Config des Systemd reloaden

systemctl daemon-reload

Alle laufenden Services anzeigen

systemctl status

Timer

Timer sind sozusagen cron(1) auf Steroiden und führt periodisch einen Service immer wieder aus.

Alle Timer anzeigen

systemctl list-timers

Timer Config

$ systemctl cat <servicename>.timer
[Unit]
Wants=network.target

[Timer]
OnCalendar=*:0/5
OnUnitActiveSec=5min

Der Service wird ueber Pattern Matching des Timer Names gemachted

$ systemctl cat <servicename>.service
[Unit]
Description=<servicename>
Wants=network.target

[Service]
ExecStart=/usr/local/bin/<command> <parameter>
StandardOutput=journal
Type=oneshot
User=root
WorkingDirectory=/tmp/

Tempfiles

Man kann auch via Systemd tmpfiles anlegen lassen. Die configs dazu liegen hier:

/etc/tmpfiles.d/*.conf
/run/tmpfiles.d/*.conf
/usr/lib/tmpfiles.d/*.conf

und eines davon sieht dann ungefähr so aus:

# Type Path        Mode UID  GID  Age Argument
  d    /var/run/mongodb 0755 mongodb mongodb - -

Type hat unendlich viele Optionen