У меня есть скрипт генератора (как описано в 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. Я предоставлю дополнительную информацию, если это необходимо.