Systemd После не запуска службы

letsencrypt.service :

[Unit]
Description=Renews letsencrypt certificates
After=network.target letsencrypt_concat_fullchain_privkey.service

[Service]
Type=oneshot
WorkingDirectory=/etc/letsencrypt/
ExecStart=/usr/bin/letsencrypt renew

Когда я запускаю эту службу вручную: sudo systemctl start letsencrypt , похоже, не запускается letsencrypt_concat_fullchain_privkey.service служба. Я запустил sudo systemctl start letsencrypt_concat_fullchain_privkey.service , и он работает так, как должен.

Я пытаюсь сделать так, чтобы по завершении letsencrypt.service я мог нравится запускать службу letsencrypt_concat_fullchain_privkey.service .

2
задан 6 March 2017 в 01:35
2 ответа

After= не подразумевает отношения зависимости (только порядок), установить зависимость можно с помощью директивы Requires= или Wants=. Requires=
Конфигурирует зависимости требования от других единиц. Если этот преобразователь активирован, то перечисленные здесь преобразователи будут активированы как Ну... Если один из других агрегатов деактивируется или его активация не справится, этот аппарат будет деактивирован. Эта опция может быть указана несколько раз или несколько единиц, разделенных по площади, могут быть указаны в один вариант и в этом случае зависимости от требований для всех перечисленных названий будет создан. Обратите внимание, что зависимости от требований не влияют порядок, в котором услуги начинаются или прекращаются. Это должно быть независимо друг от друга настроенные опции After= или Before=. Если устройство foo.service требует наличия функции панели устройств в конфигурации Requires= (Требуется). и заказ не конфигурируется с помощью After= или Before=, то оба устройства будет запущена одновременно и без каких-либо задержек между ними, если foo.service активирована. Часто лучше использовать Wants=. вместо Requesques=, чтобы получить более надежную систему. при работе с отказами в обслуживании.

Обратите внимание, что этот тип зависимости не подразумевает, что другой блок всегда должен быть в активном состоянии, когда данный аппарат работает. Конкретно: неудачные проверки условий (например, ConditionPathExists=, ConditionPathExists=, ... - см. ниже) не приводят к запуску задания a устройство с зависимостью от него Requires= Requires= Requires= Requires=. Кроме того, некоторые типы устройств могут деактивироваться самостоятельно (например, сервисный процесс может решить выходить чисто, или устройство может быть отключено пользователем от сети), то есть не распространяется на единицы, имеющие зависимость Requires=. Использовать BindsTo= тип зависимости вместе с After=, чтобы гарантировать, что единица измерения никогда не может быть в активном состоянии без конкретного другого устройства также в активное состояние (см. ниже).

Обратите внимание, что зависимости этого типа могут быть также сконфигурированы вне пределов файл конфигурации устройства путем добавления сим-ссылки на .requires/. каталог, сопровождающий файл устройства. Подробнее см. выше.

Wants=
A weaker version of Requires=. Устройства, перечисленные в этой опции, будут запущены, если конфигурирующий блок настроен. Однако, если перечисленные единицы не запускаются или не могут быть добавлены в транзакцию, это не имеет значения влияние на действительность сделки в целом. Это рекомендуемый способ подключить запуск одного агрегата к запуску другое устройство.

Обратите внимание, что зависимости этого типа могут быть также сконфигурированы вне пределов файл конфигурации устройства путем добавления сим-ссылок в каталог .want/. сопровождающий файл устройства. Подробности см. выше.

Ref: http://freedesktop.org/software/systemd/man/systemd.unit.html

5
ответ дан 3 December 2019 в 09:32

Я пытаюсь сделать так, что когда letsencrypt.service будет закончен, я бы хотел, чтобы он запустил сервис letsencrypt_concat_fullchain_privkey.service.

Вы хотите добавить это в ваш файл letsencrypt.service, затем:

ExecStartPost=/bin/systemctl start letsencrypt_concat_fullchain_privkey.service

Эта команда будет запущена последовательно после команды, которую вы дали в ExecStart=.

Более подробную информацию о ExecStartPost= можно прочитать в man systemd.service или найти любую директиву systemd в man systemd.directives.

.
0
ответ дан 3 December 2019 в 09:32

Теги

Похожие вопросы