Intereting Posts
libvirt – virbr0 – настройка IP-адреса разрешения безопасности debian / etc Руководство по монтажу – отказ в подключении почему эта команда ghostscript дает мне ошибку? OSX: Grammarian не удалит Установка только Linux на Mac и на случай, вернитесь к macOS Как установить пакеты tarball в дистрибутив Debian? Как я могу установить pingable IP, но интерфейс без подключения не связан? Yum может найти пакет, но не может его установить. Как взаимодействовать systemd и chkconfig в отношении сервисов и уровней выполнения? Является ли /var/crash/.lock безопасным для удаления или его следует сохранить? Как использовать capsh: я пытаюсь запустить непривилегированный пинг с минимальными возможностями можем ли мы просмотреть содержимое файлов журнала поверх, отправленных с удаленного компьютера на локальный Использует ли sudo команду временно изменить $ PATH как root? Невозможно локально проверить полномочия эмитента

Поручить выполнить блок после успешного завершения работы другого устройства

Я использую cloud-config для установки и настройки кластера DCOS.

Обычно для agentinstall.service требуется 5 минут.

Можно ли поручить systemd выполнить agentconfigure.service только после завершения установки agentinstall.service ?

 # Облако-конфигурации
 coreos:
   единицы:
     - name: "agentinstall.service"
       команда: "start"
       содержание: |
         [Ед. изм]
         Описание = agent_setup
         После того, как = network.target

         [Обслуживание]
         Тип = простой
         Пользователь = корень
         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

         [Установить]
         WantedBy = multi-user.target
     - name: "agentconfigure.service"
       команда: "start"
       содержание: |
         [Ед. изм]
         Описание = agent_config
         После того, как = agentinstall.service

         [Обслуживание]
         Тип = простой
         Пользователь = корень
         WorkingDirectory = / Opt / мезосфере / и т.д. /
         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

         [Установить]
         WantedBy = multi-user.target

Спасибо.

Я не знаю, как это сделать с systemd, поскольку я думаю, что это касается только запуска и запуска блоков. Как и в случае, вы можете использовать After= чтобы заставить устройство запускаться только ПОСЛЕ того, как он был запущен, или оба запускаются параллельно.

Wants= приведет к тому, что указанные единицы будут запущены параллельно (если требуемые устройства еще не запущены / активны), а не то, что вы хотите.

Requires= будет, если используется в сочетании с After= on agentconfigure.service , убедитесь, что запущен agentinstall.service ПОСЛЕ agentinstall.service agentconfigure.service ( agentinstall.service ) активен («занят»). Теперь у вас может быть цикл в agentconfigure.service который ждет, скажем, максимум 5 минут, и регулярно проверяет завершение работы agentinstall.service прежде чем он agentinstall.service свою фактическую работу. Единственный вариант, который я вижу для этого.

EDIT: Еще один вариант, который, я думаю, еще лучше … agentinstall.service запускает agentinstall.service когда установка завершается успешно, а затем завершается.

Вы хотите запустить команду /bin/bash dcos_install.sh slave ?

Измените службу с помощью этой команды на Type=oneshot . Кроме того, я не думаю, что вам нужно использовать ExecStartPre =, просто используйте ExecStart = для всего.


@JdeBP просит указать, что ваша команда echo пытается использовать перенаправление оболочки, которое не будет работать .