Назад | Перейти на главную страницу

systemd с несколькими After

Можно ли создать сервис, который зависит от нескольких других сервисов? Каков правильный синтаксис?

Такие как:

[Unit]
Description=service description
Wants=network.target
After=network.target
After=syslog.target

[Service]
User=bootapp
ExecStart=/var/app/app.jar
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

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

Дополнительный вопрос: нужно ли указывать Restart?

Опубликованный вами файл модуля выглядит нормально. Но модуль, как вы его определили здесь, не имеет строгих зависимостей, только слабые (Wants= вместо того Requires=). Это означает, что если network.target отсутствует или не запускается, этот модуль все равно будет запущен. After=Before=) используется только для упорядочивания, а не для управления зависимостями. Итак, если ваше приложение потребности другой сервис, используйте Requires=. Если ему нужна эта услуга перед его можно запустить сам, используйте After= дополнительно.

Чтобы ваше устройство запускалось автоматически после загрузки, вы должны включить его. Systemd нужно знать, где его связать для запуска, вот что WantedBy= в [Install] раздел используется для. После редактирования файла объекта и сохранения его в /etc/systemd/system/my-unit.service вы должны перезагрузить демон systemd, чтобы он подхватил новый модуль, прежде чем вы сможете его включить; команда systemctl daemon-reload. Чтобы включить тип устройства systemctl enable my-unit.service. Это добавляет символическую ссылку в /etc/systemd/system/multi-user.target.wants/ в файл вашего устройства.

Чтобы запустить его вручную, введите systemctl start my-unit.service.

Restart= требуется только в том случае, если вы хотите, чтобы ваше приложение автоматически перезапускалось при выходе. Существуют разные возможности перезапуска, например on-failure или always (больше на странице руководства systemd.service).

Также ваш app.jar должен быть исполняемым, чтобы это работало. Если это так, и оно запускает ваше приложение, тогда все в порядке. Я думаю, что банку надо начинать с чего-то. лайк java -jar app.jar, но офс. Я могу ошибаться здесь.