【问题标题】:Create systemd unit in cloud-init and enable it在 cloud-init 中创建 systemd 单元并启用它
【发布时间】:2018-10-09 16:26:00
【问题描述】:

我在 cloud-init 文件中创建了以下 systemd 单元:

- path: /etc/systemd/system/multi-user.target.wants/docker-compose.service
  owner: root:root
  permissions: '0755'
  content: |
      [Unit]
      Description=Docker Compose Boot Up
      Requires=docker.service
      After=docker.service

      [Service]
      Type=simple
      ExecStart=/usr/local/bin/docker-compose -f /opt/data/docker-compose.yml up -d
      Restart=always
      RestartSec=30

      [Install]
      WantedBy=multi-user.target

当我尝试运行时

sudo systemctl enable docker-compose.service

创建符号链接我得到这个:

Failed to execute operation: No such file or directory

但是我确定文件在/etc/systemd/system/multi-user.target.wants

【问题讨论】:

    标签: ubuntu-16.04 systemd cloud-init


    【解决方案1】:

    检查涉及的每个文件是否存在且有效:

     ls -l  /etc/systemd/system/multi-user.target.wants/docker-compose.service
     ls -l /usr/local/bin/docker-compose
     ls -l /opt/data/docker-compose.yml
     systemd-analyze verify /etc/systemd/system/multi-user.target.wants/docker-compose.service
    

    还要考虑时机。即使文件在完全启动后就存在,/etc/systemd/system/multi-user.target.wants/ 会在 cloud-init 运行时存在吗?

    【讨论】:

      【解决方案2】:

      在创建单元文件之后但在对其进行任何操作之前,应该通知 systemd 有关更改:

      systemctl daemon-reload
      

      所以 cloud-init YAML 块创建 docker-compose.service 文件后应跟随:

      runcmd:
      - systemctl daemon-reload
      

      【讨论】:

        【解决方案3】:

        我也有同样的需求,但我正在使用一个说创建 /etc/systemd/system/unit.service 然后执行 systemctl enable --now unit 的配方。

        所以我用write_files 创建了单元文件,并在text/x-shellscript 部分重新加载和启用,效果很好。 (用户脚本最后按顺序运行,而我认为不能保证何时处理用户数据中的 write_files 键。我发现它在 user 键之前的困难方式所以你可以'不要为 cloud-init 创建的用户设置所有权)。

        我认为runcmd 条目被转换为用户脚本并按列表顺序运行(在其他用户脚本之前或之后),所以如果你不喜欢x-shellscript 部分,你可以重新加载并启用这种方式. /var/log/cloud-init.log是我检查订单的地方,可能还有一个配置文件。

        完全披露:我忘记了systemctl daemon-reload 命令,但它仍然有效。实际上,对来自 cloud-init 的 systemd 操作有一个警告,因为它在 systemd 本身下运行,并且一些 systemd 命令可能会等待 cloud-init 完成——死锁!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-09-09
          • 1970-01-01
          • 2021-10-18
          • 1970-01-01
          • 2021-08-02
          • 2018-06-20
          • 2018-07-19
          • 2016-07-20
          相关资源
          最近更新 更多