Systemd: Unterschied zwischen den Versionen
| Zeile 57: | Zeile 57: | ||
=== Startskript ausführen mit Systemd === | === Startskript ausführen mit Systemd === | ||
* Unit erzeugen | * Unit erzeugen | ||
nano /etc/systemd/system/update-motd.service | |||
mit folgendem Inhalt | mit folgendem Inhalt | ||
[Unit] | [Unit] | ||
Description=/etc/ | Description=Generate /etc/motd on boot | ||
After=network-online.target | |||
Wants=network-online.target | |||
[Service] | [Service] | ||
Type=oneshot | Type=oneshot | ||
ExecStart=/ | ExecStart=/usr/local/bin/update-motd.sh | ||
RemainAfterExit=yes | RemainAfterExit=yes | ||
[Install] | [Install] | ||
WantedBy=multi-user.target | WantedBy=multi-user.target | ||
* Skript anlegen | |||
* Skript | nano /usr/local/bin/update-motd.sh | ||
mit folgendem Inhalt | mit folgendem Inhalt | ||
# | #!/bin/bash | ||
# Variablen generieren: | # Variablen generieren: | ||
. /etc/os-release | . /etc/os-release | ||
umask 0022 | |||
. /etc/os-release | |||
# MOTD neu schreiben | |||
{ | |||
echo "My Server" | |||
echo "$PRETTY_NAME" | |||
hostname -I | |||
echo | |||
echo "Managed by <Name of the Owner>" | |||
echo "------------------------------" | |||
} > /etc/motd | |||
* Service starten | * Service starten | ||
systemctl start after-local.service | systemctl start after-local.service | ||
| Zeile 147: | Zeile 133: | ||
* Info | * Info | ||
http://docs.geoserver.org/stable/en/user/installation/linux.html | http://docs.geoserver.org/stable/en/user/installation/linux.html | ||
== Logging über Systemd == | == Logging über Systemd == | ||
=== Info === | === Info === | ||
Version vom 17. Oktober 2025, 08:08 Uhr
Allgemeines
Systemd ist neben Upstart ein Ersatz für SysV-Init, siehe auch LinuxUser Artikel 01/2011.
Systemd ignoriert Abhängigkeiten
Anfragen werden in eine Warteschlange gestellt
Jedes Service wird in eine sog. CGroup gepackt. CGroup = ControlGroup, ein vom Kernel bereitgestelltes Feature.
Jedes Service hat eine Konfigurationsdatei = Unit in
/lib/systemd/system
Es gibt auch benutzerdefinierte Dateien. Diese haben Vorrang und befinden sich in
/etc/systemd/system
Es gibt auch sog. target-Dateien. Diese entsprechen den Runleveln im SysV-Init System, z.B.
default.target entspricht default runlevel
Info
Hier werden die wichtigsten systemd Kommandos sehr übersichtlich erklärt:
http://crashmag.net/useful-systemd-commands
systemctl
- systemctl
Alle Services auflisten:
systemctl
Status eines dienstes ausgeben:
systemctl status NetworkManager.service
Ein Service starten
systemctl start NetworkManager.service
Ein Service für automatischen Start aktivieren
systemctl enable postfix.service
Ein Service deaktivieren
systemctl disable postfix.service
Alle Units neu starten
systemctl daemon-reload
Bootprozess auswerten
systemd-analyze systemd-analyze blame
Gegenüberstellung von SysV-Init und Systemd
SysV-Init
/sbin/chkconfig nxserver on /sbin/chkconfig nxserver off
oder
insserv nxserver insserv --remove nxserver
Systemd
systemctl enable nxserver.service systemctl disable nxserver.service
http://fedoraproject.org/wiki/SysVinit_to_Systemd_Cheatsheet
Erstellen einer Systemd Unit
Startskript ausführen mit Systemd
- Unit erzeugen
nano /etc/systemd/system/update-motd.service
mit folgendem Inhalt
[Unit] Description=Generate /etc/motd on boot After=network-online.target Wants=network-online.target [Service] Type=oneshot ExecStart=/usr/local/bin/update-motd.sh RemainAfterExit=yes [Install] WantedBy=multi-user.target
- Skript anlegen
nano /usr/local/bin/update-motd.sh
mit folgendem Inhalt
#!/bin/bash # Variablen generieren: . /etc/os-release umask 0022 . /etc/os-release
# MOTD neu schreiben
{
echo "My Server"
echo "$PRETTY_NAME"
hostname -I
echo
echo "Managed by <Name of the Owner>"
echo "------------------------------"
} > /etc/motd
- Service starten
systemctl start after-local.service
Systemd Unit für den geoserver
Folgende Systemd Unit sorgt für den Start des geoserver. Man kann diese Datei speichern, wo man will.
# /etc/geoserver.service [Unit] Description=GeoServer After=network.target [Service] User=geoserver Environment=JAVA_HOME=/usr/lib64/jvm/jre-1.7.0-openjdk Environment=GEOSERVER_HOME=/usr/share/geoserver ExecStart=/usr/share/geoserver/bin/startup.sh ExecStop=/usr/share/geoserver/shutdown.sh [Install] WantedBy=multi-user.target
Eine Systemd Unit für den Geoserver ist nur dann notwendig, wenn die bin.zip Variante installiert werden soll:
Will man den Geoserver unter Tomcat installieren, braucht man keine Systemd Unit:
Installation von geoserver
- Download
cd /tmp wget http://sourceforge.net/projects/geoserver/files/GeoServer/2.8.1/geoserver-2.8.1-bin.zip
- Entpacken
unzip -d geoserver geoserver-2.8.1-bin.zip
- Verschieben nach /usr/share
mv /tmp/geoserver /usr/share
- Environment Variable definieren und aktivieren
echo "export GEOSERVER_HOME=/usr/share/geoserver" >> ~/.profile source ~/.profile
- Einen Benutzer anlegen, unter dem der Server laufen soll
useradd -r geoserver
- Eigentumsrechte setzen
sudo chown -R geoserver /usr/share/geoserver/
- Info
http://docs.geoserver.org/stable/en/user/installation/linux.html
Logging über Systemd
Info
Konfiguration
# /etc/systemd/journald.conf [Journal] Storage=persistent
Sonst gehen die Log-Einträge nach dem Reboot verloren.
systemctl restart systemd-journald
Anwendungsbeispiele
- Log für ein bestimmtes Service anzeigen
journalctl -u apache2 journalctl -u postfix ...
- Bootlog
journalctl -b journalctl --list-boots journalctl -b -1
- Zeitintervalle
journalctl --since 10:00 --until 11:00 journalctl --since "today" --until "3:20"
Ab jetzt laufende Logs anzeigen
journalctl --since "now" -f
- Log auf STDOUT umleiten
Normalerweise werden die LOG-Einträge mit einem Pager angezeigt. Lange Zeilen sind dann eventuell nicht vollständig sichtbar.
journalctl --no-pager
Rotation steuern über Systemd
- Wechsel von cron zu systemd
Bisher wurde AFAIK die Rotation der LOG Dateien gesteuert über cron mit Hilfe eines Scriptes in /etc/cron.daily. Nun soll dieser Dienst anscheinend von systemd übernommen werden.
- Hier ist der Timer konfiguriert:
/usr/lib/systemd/system/logrotate.timer
Bei openSuse 12.3 hat man den Timer zwar konfiguriert, aber anscheinend vergessen, ihn zu starten.
systemctl enable logrotate.timer systemctl start logrotate.timer
Sonstiges
- Umask ändern für den (KDE Plasma) Desktop
mkdir /etc/systemd/system/user@.service.d/ touch /etc/systemd/system/user@.service.d/override.conf
Folgendes in die Datei eingetragen:
[Service] UMask=0002
Siehe folgende Anleitung