【问题标题】:Instruct to execute an unit after completing another unit successfully成功完成另一个单元后指示执行一个单元
【发布时间】:2018-03-12 21:45:17
【问题描述】:

朋友。

我使用 cloud-config 来安装和配置 DCOS 集群。

通常“agentinstall.service”服务需要 5 分钟才能完成。

是否可以指示 systemd 仅在“agentinstall.service”完成之后执行“agentconfigure.service”?

#cloud-config
coreos:
  units:
    - name: "agentinstall.service"
      command: "start"
      content: |
        [Unit]
        Description=agent_setup
        After=network.target

        [Service]
        Type=simple
        User=root
        WorkingDirectory=/tmp
        ExecStartPre=/bin/curl -o /tmp/dcos_install.sh  http://bootstapnode-0.dev.myztro.internal:9090/dcos_install.sh
        ExecStartPre=/bin/chmod 755 dcos_install.sh
        ExecStart=/bin/bash dcos_install.sh slave

        [Install]
        WantedBy=multi-user.target
    - name: "agentconfigure.service"
      command: "start"
      content: |
        [Unit]
        Description=agent_config
        After=agentinstall.service

        [Service]
        Type=simple
        User=root
        WorkingDirectory=/opt/mesosphere/etc/
        ExecStartPre=/bin/echo "MESOS_ATTRIBUTES=cluster:uploader" >> /opt/mesosphere/etc/mesos-slave-common
        ExecStartPre=/bin/rm -f /var/lib/mesos/slave/meta/slaves/latest
        ExecStart=/usr/bin/systemctl restart dcos-mesos-slave

        [Install]
        WantedBy=multi-user.target

谢谢。

【问题讨论】:

  • 我投票结束这个问题,因为它是关于系统配置和安装,而不是编程。这样的问题最适合 unix.stackexchange.com

标签: systemd coreos dcos systemctl


【解决方案1】:

使用 After/Before 关键字的 systemd 非常有可能。 你可以使用类似下面的东西 在agentconfigure.service,提供以下说明

After=agentinstall.service

通常After 确保在启动给定服务后启动依赖服务。

由于您提到 agentinstall.service 需要 5 分钟才能完成,因此您必须在 agentinstall.service 中添加 Type=notify,并在处理完成后从您的应用程序中执行 sd_notify()。 基于此 systemd 将启动下一个服务,即agentconfigure.service

阅读更多关于相同here 阅读 sd_notify() here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-04
    • 2022-07-06
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    相关资源
    最近更新 更多