다른 단위를 성공적으로 완료한 후 다른 단위의 실행을 지시합니다.

다른 단위를 성공적으로 완료한 후 다른 단위의 실행을 지시합니다.

cloud-config를 사용하여 DCOS 클러스터를 설치하고 구성합니다.

일반적으로 agentinstall.service서비스를 완료하는 데 5분이 소요됩니다.

systemd에게 실행을 지시하는 것이 가능합니까?agentconfigure.service 그 후에야 agentinstall.service충분히?

#cloudconfig
핵심:
  단위:
    - 이름: "agentinstall.service"
      명령: "시작"
      내용: |
        [단위]
        설명=프록시 설정
        이후 = network.target

        [제공하다]
        유형=단순
        사용자=루트
        작업 디렉토리=/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 슬레이브

        [설치하다]
        WantedBy=다중 사용자.대상
    - 이름: "agentconfigure.service"
      명령: "시작"
      내용: |
        [단위]
        설명 = 프록시 구성
        이후=agentinstall.service

        [제공하다]
        유형=단순
        사용자=루트
        작업 디렉토리=/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 dcos-mesos-slave 다시 시작

        [설치하다]
        WantedBy=다중 사용자.대상

감사해요.

답변1

systemd를 사용하여 이 작업을 수행하는 방법은 장치를 시작하고 실행하는 데에만 관심이 있다고 생각했기 때문입니다. 예를 들어, After=지정된 장치가 시작된 후에만 한 장치가 강제로 시작되도록 하거나 두 장치가 병렬로 시작되도록 할 수 있습니다.

Wants=원하는 장치가 아닌 지정된 장치가 병렬로 시작되도록 합니다(필요한 장치가 아직 시작/활성화되지 않은 경우).

Requires=After=on과 함께 사용하면 agentconfigure.service활성화된("busy") 후에 시작됩니다 agentconfigure.service. 이제 최대 5분 동안 대기 루프를 가질 수 있으며 agentinstall.service실제 작업을 계속하기 전에 agentconfigure.service주기적으로 완료 여부를 확인할 수 있습니다 . agentinstall.service내가 보는 유일한 옵션.

편집: 제가 생각하는 또 다른 옵션은 설치가 성공하면 agentinstall.service실행 agentconfigure.service한 다음 종료하는 것입니다.

답변2

/bin/bash dcos_install.sh slave명령 후에 실행 하시겠습니까 ?

해당 명령을 사용하여 서비스를 Type=oneshot.


echo@JdeBP가 귀하의 명령이 쉘 리디렉션을 사용하려고 한다는 점을 지적하라고 요청했습니다.이건 작동하지 않을 거야.

답변3

systemd 249, 2021년 7월 출시, 이를 정확하게 수행하는 새로운 종속성 유형에 대한 지원이 추가되었습니다. 이를 OnSuccess통해 단위가 완료될 때 실행되어야 하는 단위를 지정할 수 있습니다.

따라서 호스트의 시스템이 249 이상인 경우 다음이 agentinstall.service필요합니다.

[Unit]
Description=agent_setup
After=network.target
OnSuccess=agentconfigure.service

이제 이 작업을 수행할 수 systemctl start agentinstall.service있으며 작업이 완료될 때마다 agentconfigure.service자동으로 시작됩니다.


OnFailure=완료를 위해 - 동일한 작업을 수행하지만 장치가 실패할 때만 트리거되는 종속성 도 있습니다 . 2013년에 출시된 systemd v201에 도입되었습니다.

관련 정보