Wie überschreibe ich die Einstellungen der Systemd Unit-Datei?


14

Ich habe MySQL auf meinem Arch Linux Server installiert. Ich habe das Datenverzeichnis an einen Ort unter / home verschoben, an dem mein RAID-Volume bereitgestellt ist. Ich habe festgestellt, dass mysqld in dieser Konfiguration standardmäßig nicht gestartet wird, da die systemd-Einheit die Einstellung enthält ProtectHome=true.

Ich möchte nur diese Einstellung überschreiben . Ich möchte die ExecStartoder ähnliche Befehle nicht erneut angeben , falls sie sich beim Upgrade des Pakets ändern.

Ich habe versucht, eine einfache Datei bei /etc/systemd/systemaufgerufen zu erstellen mysqld.serviceund nur diese Zeilen hinzugefügt:

[Service]
ProtectHome=false

Dies funktioniert nicht, da der Dienst in / etc den Systemdienst ersetzt und nicht überschreibt.

Gibt es eine Möglichkeit, Einstellungen in systemd-Einheitendateien auf diese Weise zu überschreiben, ohne die Dateien in / usr / lib / systemd / system direkt zu ändern? (was ich jetzt als vorübergehende Korrektur getan habe, obwohl dies am Ende zurückgesetzt wird, wenn das Paket aktualisiert wird)



Eine verwandte Frage ist unix.stackexchange.com/q/265281/5132 .
JdeBP

Antworten:


12

Sie können eine systemd-Einheitendatei mit überschreiben

systemctl edit mysqld.service

Alle in der Überschreibungsdatei gemachten Anweisungen haben Vorrang.


25

systemctl editerstellt eine Drop-In- Datei, in der Sie die meisten Einstellungen überschreiben können. Diese Dateien enthalten jedoch einige erwähnenswerte Besonderheiten:

Beachten Sie, dass Sie für Drop-In-Dateien, wenn Sie Einträge aus einer Einstellung entfernen möchten, die als Liste analysiert wird (und keine Abhängigkeit darstellt), z. B. AssertPathExists=(oder z. B. ExecStart=in Serviceeinheiten), zuerst die Liste löschen müssen, bevor Sie sie erneut löschen - Hinzufügen aller Einträge mit Ausnahme desjenigen, der entfernt werden soll.

#/etc/systemd/system/httpd.service.d/local.conf
[Unit]
AssertPathExists=
AssertPathExists=/srv/www

Abhängigkeiten ( After=usw.) können nicht auf eine leere Liste zurückgesetzt werden, sodass Abhängigkeiten nur in Drop-Ins hinzugefügt werden können. Wenn Sie Abhängigkeiten entfernen möchten, müssen Sie die gesamte Einheit überschreiben.

Verwenden Sie systemctl edit --fulldiese Option, um die gesamte Einheit zu überschreiben. /etcWenn noch keine vorhanden ist , wird eine Kopie erstellt, und Sie können sie bearbeiten.

Siehe auch Systemd-Löschüberschreibungen


2
+1 für den Tipp zum LöschenExecStart
JoeNahmias

+1 Wissen Sie, wo dies dokumentiert ist? Ich meine speziell das Ändern / Löschen / Hinzufügen von Drop-Ins?
AndreasT

1
@AndreasT: Dies ist ein direktes Zitat aus der Dokumentation, auf die im Beitrag verwiesen wird (" Drop-In- Datei"). Oder habe ich deine Frage falsch verstanden?
Benutzer
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.