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)

fdmillion
quelle
Siehe askubuntu.com/q/659267/62688
Monica - M. Schröder
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.

jdwolf
quelle
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

Benutzer
quelle
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