首页 文章

如何在Systemd Unit配置中使用'when'条件

提问于
浏览
1

如何在CoreOS上使用systemd单元的'when'或'if'条件语句?

例如:我只想在变量设置为True时挂载目录(比如 A == "True"

所以喜欢:

- name: var-lib-docker.mount
  contents: |
    [Unit]
    Description=Mount ephemeral to /var/lib/docker
    [Mount]
     if (A == "true") # This part I'm not sure where and how to put.
       What=/dev/xvd1
       Where=/var/lib/docker
       Type=ext4

2 回答

  • 0

    仅仅创建一个单元并不能描述该单元何时以及在何种情况下被激活;激活就是你在这里所关心的 - 所以一个解决方案就像让其他代码只告诉systemd启动手头的mount单元一样简单,如果你想要它 .

    但是,如果您希望设备在启动时执行自己的条件评估,请参阅man systemd.unit以获取用于此目的的各种标志 . 例如:

    [Unit]
    ConditionPathExists=/etc/mount-docker
    

    如果 /etc/mount-docker 存在,将导致仅挂载文件系统 . 同样,您可以根据在该层运行的逻辑来决定是否从Ansible启用装载点的单元 .

  • 0

    如果你想做一些在CoreOS上无法用 systemd 做的有条件的事情,他们的 cloud-config 工具有一个write_file指令 . 使用它,您可以将bash脚本写入包含所需条件逻辑的磁盘 . 然后,您可以创建一个启动该bash脚本的 systemd 服务 . bash脚本可以依次对 systemctl start ... 进行其他调用以启动其他 systemd 服务或挂载 .

相关问题