跳转至

systemd向sysmaster迁移

toml配置格式

Note

早期版本sysmaster使用toml格式的单元配置文件,如.service.socket等使用toml配置格式解析. 细节请参考:https://github.com/toml-lang/toml

与systemd配置相比, 一些常见的配置问题:

  1. 布尔量只允许配置为truefalse systemd支持解析yesnoyn等多种布尔量的表示形式,但sysmaster不支持。
  2. 字符串请使用"" systemd在配置如:ExecStartDescription等字符串的值时,无需使用引号,但sysmaster必须使用引号。
  3. 相同配置仅允许配置一次。 systemd支持配置多个AfterBefore等,sysmaster不支持,用户可以使用"包裹的;分隔的多个单元名替换。这里重点说明,在多个单元的场景下,部分用户可能会根据toml语法误配置为[]数组,sysmaster实际上是按照字符串处理,内部重新解析。
  4. 分隔符仅支持; systemd支持如;,空格等多种多样的分隔符,但sysmaster仅允许使用;
  5. 错误配置会导致单元无法启动。 systemd会忽略一些非关键的配置错误,但sysmaster严格检查配置是否正确,配置错误将导致单元无法启动。
  6. 不允许配置为空。 systemd允许用户将某个选项配置为空,此时它会采用缺省值。sysmaster不允许配置为空,如果用户需要使用缺省值,可以直接在配置文件中删除该配置。
  7. 尽量避免使用dropin目录。 systemd允许用户自定义dropin目录作为原有单元配置的补充。以foo.service: After=bar1.servicefoo.service.d/10.conf: After=bar2.service为例,对同一优先级目录下的这两个配置文件定义了相同的字段,systemd会智能合并,好像他们是写在同一个文件中。即:上述写法等价于foo.service: After=bar1.service, bar2.service。而sysmaster底层基于confique的解析器,会根据文件的添加顺序,随机选择一个。即:上述写法在sysmaster中等价于foo.service: After=bar1.service foo.service: After=bar2.service

最后更新: November 4, 2023
创建日期: April 8, 2023