All we need is an easy explanation of the problem, so here it is.
I have installed MySQL on my Arch Linux server. I moved the data directory to a place under /home, where my RAID volume is mounted. I noticed that mysqld will not start in this configuration by default since the systemd unit contains the setting ProtectHome=true
.
I want to override just this setting. I don’t want to re-specify the ExecStart
or similar commands, in case they change when the package is upgraded.
I tried making a simple file at /etc/systemd/system
called mysqld.service
and added only these lines:
[Service]
ProtectHome=false
This doesn’t work as it looks like the service in /etc replaces, not overrides, the system service.
Is there a way to override settings in systemd unit files this way without directly modifying the files in /usr/lib/systemd/system? (which is what I have done for now as a temporary fix, although that will end up reverted if the package is updated)
How to solve :
I know you bored from this bug, So we are here to help you! Take a deep breath and look at the explanation of your problem. We have many solutions to this problem, But we recommend you to use the first method because it is tested & true method that will 100% work for you.
Method 1
systemctl edit
will create a drop-in file where you can override most of the settings, but these files have some specifics worth mentioning:
Note that for drop-in files, if one wants to remove entries from a setting that is parsed as a list (and is not a dependency), such as
AssertPathExists=
(or e.g.ExecStart=
in service units), one needs to first clear the list before re-adding all entries except the one that is to be removed.#/etc/systemd/system/httpd.service.d/local.conf [Unit] AssertPathExists= AssertPathExists=/srv/www
Dependencies (
After=
, etc.) cannot be reset to an empty list, so dependencies can only be added in drop-ins. If you want to remove dependencies, you have to override the entire unit.
To override the entire unit, use systemctl edit --full
, this will make a copy in /etc
if there is none yet and let you edit it.
See also Systemd delete overrides
Method 2
You may override a systemd unit file using
systemctl edit mysqld.service
Any statements made in the override file will take priority.
Note: Use and implement method 1 because this method fully tested our system.
Thank you 🙂
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0