Сгенерированный системный модуль не запускается при загрузке
У меня есть скрипт генератора (как описано 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 ответ
Способ устранения неполадок состоит в том, чтобы загрузить вашу систему, и когда ваша служба не запускается должным образом, вы можете выполнить команду:
системный анализ дампа
Это выводит очень подробный список информации о каждом модуле, включая зависимости. Из этого обычно можно выяснить, почему ваш аппарат не перешел в активное состояние.