5

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

Генератор работает при загрузке и успешно генерирует файл модуля в dir /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/executable
generatorDir=$3
unitFile=$generatorDir/$serviceName.service

cat > "$unitFile" <<EOF
[Unit]
Description=$serviceName service
After=network.target

[Service]
Type=simple
ExecStart=$bin

[Install]
WantedBy=multi-user.target
EOF

mkdir "$generatorDir/multi-user.target.wants" 2>/dev/null
ln -s "$unitFile" "$generatorDir/multi-user.target.wants/$serviceName.service"

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

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

1 ответ1

1

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .