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

Как настроить Jetty как услугу?

Поскольку я использую Debian и пакеты в диспетчере пакетов не совсем актуальны, я вынужден выполнить установку вручную.

Я загрузил последнюю версию в виде файла .tar.gz и распаковал его в / opt. Теперь я не уверен, что делать дальше.

Мне нужно, чтобы Jetty запускалась как служба при запуске для каждого пользователя на этом ПК. Но как? Ничего не нашел в документации.

Для CentOS 7 Linux я скачал последний дистрибутив Jetty и создал файл /etc/systemd/system/jetty.service:

[Unit]
Description=Jetty
After=network-online.target

[Service]
Type=simple
User=jetty
Group=jetty
ExecStart=/usr/bin/java -jar /usr/share/java/jetty-distribution-9.3.10.v20160621/start.jar jetty.home=/usr/share/java/jetty-distribution-9.3.10.v20160621 jetty.base=/var/www/jetty jetty.http.port=8080
ExecStop=/bin/kill ${MAINPID}
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

Затем я выполнил команды для создания пользователя и базового каталога:

# useradd -s /sbin/nologin jetty

# java -jar /usr/share/java/jetty-distribution-9.3.10.v20160621/start.jar \
      jetty.home=/usr/share/java/jetty-distribution-9.3.10.v20160621 \
      jetty.base=/var/www/jetty \
      --add-to-startd=http,servlet,webapp,deploy,resources,ext,fcgi,websocket,proxy-protocol

# chown -R jetty.jetty /var/www/jetty

Затем я активировал новую услугу:

# systemctl enable jetty

# systemctl start jetty

И наконец проверил логи:

# systemctl status -l jetty

И проверил, что Jetty прослушивает порт 8080:

# netstat -an | grep -w LISTEN

Я думаю, что команды в Debian Linux будут похожи ...

Должен быть jetty.sh сценарий в bin каталог. Я не знаю, работает ли это под Debian, но это должно быть хорошей отправной точкой.

Если вы не можете найти jetty.sh, просто скачайте последний http://dev.eclipse.org/svnroot/rt/org.eclipse.jetty/jetty/trunk/jetty-distribution/src/main/resources/bin/jetty.sh

И сохраните его в /etc/init.d/jetty

Также вам может потребоваться отредактировать / etc / default / jetty, чтобы установить свои индивидуальные настройки, например:

JAVA_HOME=
JAVA_OPTIONS=
JETTY_HOME=
JETTY_USER=
JETTY_LOGS=

Если вы хотите, чтобы служба запускалась после перезагрузки, не забудьте добавить ее на уровень запуска по умолчанию с помощью update-rc.d

То, что предлагает Александр Фарбер, в основном правильно и полезно, но я хотел бы указать на свой небольшой проект https://github.com/cosenmarco/jetty-systemd-notifier который сигнализирует systemd о жизненном цикле Jetty.

В этом проекте я пытаюсь предоставить наилучший способ взаимодействия с systemd. "Простой" тип обслуживания может быть не лучшим в некоторых ситуациях, потому что the service manager will consider the unit started immediately after the main service process has been forked off. (из системные документы)

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

Также this means systemctl start command lines for simple services will report success even if the service's binary cannot be invoked successfully

Это означает, что если по какой-то причине причал не может запуститься из-за своей конфигурации, он все равно сообщит о работоспособном состоянии в systemd.

Кроме того, в приведенном примере я также пытаюсь воспроизвести некоторые полезные функции, которые обычно находятся в jetty.sh.