linux – 是否可以覆盖systemd单元文件来创建模板单元文件?
我知道systemd提供了一种优秀的机制来覆盖包提供的单元文件以影响服务配置/行为.这通常通过使用以下命令来完成
sudo systemctl edit <unitfile> 在.创建一个覆盖conf文件 /etc/systemd/system/<unitfile.d>/ Systemd还提供了一个单独的机制来定义模板单元文件,并将其实例化以在运行时创建特定于实例的单元.这需要将模板文件命名为 <servicename>@.service 然后将其实例化为 systemctl start <servicename>@<instancename> 现在,我有一种情况,我想将一个包提供的服务作为多个单元实例运行.我想避免创建自己的模板单元文件,所以我试图查看是否可以覆盖包提供的单元文件来创建模板单元文件. 因为,根据我的理解,模板单元文件的命名约定与常规单元文件不同,我想我不能通过将模板文件放在/ etc / systemd / system中来覆盖包提供的单元文件. 是否有任何明确的方法来实现我想要做的事情? 具体情况: >修改grafana-server.service文件(使用%I设置文件夹位置和文件路径) sudo systemctl start grafana-server@dev 和 sudo systemctl start grafana-server@stg 但是,这会破坏grafana提供的服务单元文件的链接,如果它们在升级时增强了服务文件,我将需要再次重做此活动.我的目标是避免这种直接依赖,而是将其转换为覆盖依赖. 有什么想法吗? 解决方法
对于下面的两个选项,首先覆盖/ etc / systemd / system上的grafana-server.service(不带@)并禁止ExecStart(假设它使用它)使它什么都不启动.在/etc/systemd/system/grafana-server.service.d/10-disable-execstart.conf中:
[Service] ExecStart= WorkingDirectory=/path/to/your/confdir 选项1 – 覆盖通用实例 使用以下配置创建一个与您的设置对应的grafana-server @ .service到[Unit]和[Service]: [Unit] PartOf=grafana-server.service ReloadPropagatedFrom=grafana-server.service 这些应该将grafana-server启动/停止/重启绑定到所有实例.魔术没有很好的记录,但是如果你将/ lt; instance_name> .conf文件放在/ path /到/ your / confdir上,那么所有这些实例都将自动绑定! 选项2 – 覆盖特定实例以保持包配置 如果要保持包服务文件中的所有更新优点,但接受主要自定义实例选项,请为通用名称创建每个实例名称的符号链接 /lib/systemd/system/grafana-server.service 至 /etc/systemd/system/grafana-service@<instance>.service 然后使用仅覆盖该实例的特定选项 /etc/systemd/system/grafana-server@<instance>.service.d/99-my-options.conf 确保将以下配置添加到[Unit]和[Service]到99-my-options.conf: [Unit] PartOf=grafana-server.service ReloadPropagatedFrom=grafana-server.service 这将为每个实例假设所有grafana-server.service选项,并将使用99-my-options.conf文件中的所有选项覆盖它们,并将start / stop / restart操作绑定到grafana-server.service. 如果您运行,请在两个选项上 systemctl start grafana-server.service 将启动所有具有/path/to/confdir/u0026lt;instanceu0026gt;.conf文件的实例.这同样适用于停止和重新启动,您可以使用他们的grafana-server @< instance>单独管理它们.服务名称. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |