问题描述
由于这些服务是通过包管理器安装的,比如 YUM 安装,不建议直接修改包中的文件。因为随着软件的升级,该单元文件会被覆盖或者删除,因此不应该直接修改属于软件包的文件。
比如,安装了MysqL服务,单元文件/usr/lib/systemd/system/MysqLd.service为包中自带的,但是我们需要调整它的配置。而你应该直接修改这个文件,因为:如果升级MysqL版本,该文件会被覆盖。
标准操作
正确的做法是使用 systemctl edit 命令。
基于上面的例子,执行systemctl edit MysqLd.service命令,该会打开编辑器,你可以在这其中输入自定义配置,例如:
[Service] LimitNOFILE=65535
然后保存退出。
实际上,上面的操作流程就是:创建了/etc/systemd/system/MysqLd.service.d/override.conf文件,并将编辑器的内容写入到override.conf文件中。你也可以在定义自己的.conf文件。
!!!另外有几个需要注意的地方:
(1)当使用systemctl edit命令进行修改的时候,需要指定章节,比如示例中的[Service]部分。
(2)覆盖是以指令单位的。例如,上面虽然指定了[Service]部分,但是只会覆盖[Service]部分的LimitNOFILE配置。
(3)如果它是一个列表,那你需要清空在定义。比如,先指定LimitNOFILE=后指令,再指定LimitNOFILE=65535指令。
(4)不需要运行systemctl daemon-reload命令。
查看修改
例如执行systemctl cat MysqLd.service命令,会产生类似如下的输出:
# # /usr/lib/systemd/system/MysqLd.service # # Simple MysqL systemd service file # # systemd supports lots of fancy features, look here (and linked docs) for a full list: # http://www.freedesktop.org/software/systemd/man/systemd.exec.html # # Note: this file ( /usr/lib/systemd/system/MysqL.service ) # will be overwritten on package upgrade, please copy the file to # # /etc/systemd/system/MysqL.service # # to make needed changes. # # systemd-delta can be used to check differences between the two MysqL.service files. # [Unit] Description=MysqL Community Server After=network.target After=syslog.target [Install] WantedBy=multi-user.target Alias=MysqL.service [Service] User=MysqL Group=MysqL # Execute pre and post scripts as root PermissionsstartOnly=true # Needed to create system tables etc. ExecStartPre=/usr/bin/MysqL-systemd-start pre # Start main service ExecStart=/usr/bin/MysqLd_safe --basedir=/usr # Don't signal startup success before a ping works ExecStartPost=/usr/bin/MysqL-systemd-start post # Give up if ping don't get an answer TimeoutSec=600 Restart=always PrivateTmp=false # /etc/systemd/system/MysqLd.service.d/override.conf [Service] LimitNOFILE=65535
它同时输出了哪些指令是来自于/usr/lib/systemd/system/MysqLd.service文件,哪些是来自于/etc/systemd/system/MysqLd.service.d/override.conf文件。
关于环境变量
环境变量的修改也是类似的方法,但是使用的是Environment指令,如同Environment=FOO=bar的形式。
还原修改
执行systemctl revert命令来还原修改。它会还原至原始版本,删除所有的覆盖,还原单元文件的属性到默认值,并且进行unmask操作。
执行systemctl revert MysqLd.service命令来还原之前的修改。
!!!但是要高于229版本(systemctl --version),而CentOS Linux release 7.4.1708 (Core)是systemd 219版本。
相关文章
「systemd」- 从 systemctl status 中提取个别字段
「Supervisor」- 创建首个配置文件
「systemd」 - 创建和修改单元文件
「systemd.timer」
参考文献
How do I override or configure systemd services?
Systemd delete overrides
systemd.unit — Unit configuration
How to override systemd unit file settings?
How to find out the systemd version on Raspbian
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。