Сгенерированный системный модуль не запускается при загрузке

У меня есть скрипт генератора (как описано man systemd.generator) в /etc/systemd/system-generators/ каталог.

Генератор работает при загрузке и успешно генерирует файл модуля в каталог /run/systemd/generator.late/ (с использованием ARGV[3] аргумент). Генератор также добавляет символическую ссылку на /run/systemd/generator.late/multi-user.target.wants/ как я хочу, чтобы запустить службу при загрузке (особенно, когда сеть работает).

Файл модуля и символическая ссылка созданы успешно. Проблема в том, что служба не запускается автоматически.

Когда я выдаю команду service myService status, он говорит неактивно и журнал пуст, что заставляет меня поверить, что он даже не пытался запустить службу. Если я сделаю service myService start, он начинается (= файл модуля в порядке).

В попытке найти решение этой проблемы я скопировал этот сгенерированный файл модуля в /etc/systemd/system и вручную добавил символическую ссылку на /etc/systemd/system/multi-user.target.wants и перезагрузил машину. Служба запускалась при загрузке.

Все это заставляет меня думать, что ссылка от /run/systemd/generator.late/multi-user.target.wants/ моему устройству недостаточно для запуска сгенерированного сервиса. Я проверил другие файлы модуля, сгенерированные системой в /run/systemd/generator.late/ и они, кажется, делают то же самое и используют символическую ссылку, как я. Так что здесь происходит?

Есть ли способ решить эту проблему? Символическая ссылка, которую я создаю неправильно? Нужно ли делать что-то большее, чем просто символическую ссылку?

Финальный скрипт генератора выглядит так:

#! / bin / bash serviceName = myService bin = / path / to / my / исполняемый файл generatorDir=$3
unitFile=$generatorDir/$serviceName.service

cat > "$unitFile" << EOF [Unit] Описание = $ serviceName service After = network.target [Сервис] Тип = простой ExecStart = $ bin [Установить] WantedBy = multi-user.target EOF mkdir "$ generatorDir / multi-user.target.wants" 2> /dev/null
ln -s "$unitFile" "$generatorDir/ мульти-user.target.wants/$serviceName.service" 

Примечание: настоящий скрипт немного сложнее, это всего лишь минималистичный пример.

Я использую Ubuntu 16.10. Я предоставлю дополнительную информацию, если это необходимо.

1 ответ

Способ устранения неполадок состоит в том, чтобы загрузить вашу систему, и когда ваша служба не запускается должным образом, вы можете выполнить команду:

системный анализ дампа

Это выводит очень подробный список информации о каждом модуле, включая зависимости. Из этого обычно можно выяснить, почему ваш аппарат не перешел в активное состояние.

Другие вопросы по тегам