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

Я использую 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

Спасибо.

2 Solutions collect form web for “Поручить выполнить блок после успешного завершения работы другого устройства”

Я не знаю, как это сделать с 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 пытается использовать перенаправление оболочки, которое не будет работать .

  • Как узнать, какая команда выполняется файлом systemd .timer?
  • systemd запустить блок на успех другого
  • Cron vs systemd таймеры
  • Периодически выполняемый btrfs-scrub
  • systemd: изящно сбой резервного копирования, когда внешний диск не подключен
  • «Systemctl list-timers» показывает последние выполненные даты, которые далеки в будущем
  • Interesting Posts

    Запустите 2 экземпляра xinit с выходом для разделения видео

    Как открыть PDF-файл с помощью PuTTY в качестве терминала?

    Как «man git init» получает правильную страницу руководства?

    Таблица разделов повреждена после использования TestDisk

    AWK поможет заполнить остальную часть столбцов файлом в файле

    Как сделать svn сохранить учетные данные, когда –non-interactive

    Как убить процесс в топе?

    Используя wget или другую команду, как скачать сейчас, но конвертировать ссылки позже?

    Fedora 18 Нет беспроводной

    Когда «/ bin / rm» удаляется при выдаче команды «rm -rfv /»?

    Как запустить прямой эфир в качестве локального радио

    Насколько хорошо работает инопланетянин для конвертирования пакетов?

    Объединение файлов CSV (одна строка в строке) без потери строки заголовка

    Ярлык, созданный при монтировании любого диска

    Почему при запуске команды ifconfig более одного HWadder

    Linux и Unix - лучшая ОС в мире.