Можно ли создать сервис, который зависит от нескольких других сервисов? Каков правильный синтаксис?
Такие как:
[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
, но офс. Я могу ошибаться здесь.