Параметр After= не работает в файле службы systemd

Параметр After= не работает в файле службы systemd

У меня есть два скрипта оболочки с именами first.sh и second.sh. Содержимое first.sh и second.sh приведено ниже:

    >>first.sh
    #!/bin/bash
    while true
    do 
        echo The current time is $(date)
        sleep(1)
    done



    >>second.sh
    #!/bin/bash
    while true
    do 
        echo The current time from second script is $(date)
        sleep(1)
    done

Аналогично, содержимое first.service следующее:

[Unit]
Description=first service
After=second.service
[Service]
ExecStart=/home/abanstola/first.sh

Содержание second.service:

[Unit]
Description=Second service
[Service]
ExecStart=/home/abanstola/second.sh

Обратите внимание After=second.serviceна в коде first.service. Согласно документации, первая служба не должна запускаться, пока не запустится вторая. Но даже если я отключу или остановлю вторую службу, первая служба запустится без проблем. Что я делаю не так?

решение1

Вы неправильно прочитали документацию.Цитировать:

Если блок foo.serviceсодержит настройкуBefore=bar.service и оба блока запускаются, bar.serviceзапуск откладывается до тех пор, пока foo.serviceне завершится запуск. After=является обратным по отношению к Before=

Выделено мной. Это имеет эффект только если оба блока запущены. Если вы отключите один из них, это не имеет никакого эффекта.

Не совсем понятно, чего вы на самом деле хотите.

Вероятно, лучшим выбором будет:

Requires=

Аналогично Wants=, но объявляет более сильную зависимость требований. Зависимости этого типа также можно настроить, добавив символическую ссылку на .requires/каталог, сопровождающий файл модуля.

Если этот блок активируется, перечисленные блоки также будут активированы. Если один из других блоков не активируется, и After=установлена ​​зависимость упорядочивания от отказавшего блока, этот блок не будет запущен. Кроме того, с указанием или без указания After=этот блок будет остановлен, если один из других блоков явно остановлен.

PartOf=

Настраивает зависимости, аналогичные Requires=, но ограниченные остановкой и перезапуском юнитов. Когда systemd останавливает или перезапускает перечисленные здесь юниты, действие распространяется на этот юнит. Обратите внимание, что это односторонняя зависимость — изменения в этом юните не влияют на перечисленные юниты.

Связанный контент