如何将 Jetty 配置为服务?

如何将 Jetty 配置为服务?

由于我使用的是 Debian,并且包管理器中的包不是最新的,因此我不得不进行手动安装。

我下载了最新版本的 .tar.gz 文件,并将其解压到 /opt。现在我不确定下一步该做什么。

我需要让 Jetty 在启动时作为服务运行,供这台电脑上的每个用户使用。但是该怎么做呢?我在文档中找不到任何内容。

答案1

如果你找不到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 将其添加到默认启动级别

答案2

对于 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 上的命令应该类似......

答案3

jetty.sh目录中应该有一个脚本bin。我不知道它是否在 Debian 下运行,但它应该是一个很好的起点。

答案4

Alexander Farber 的建议基本上是正确的,也是可用的,但我想指出我的小项目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.(从systemd 文档

如果存在依赖服务,它们可能会在 Jetty 准备好接收请求之前就开始向其发送请求。

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

这意味着如果由于某种原因 jetty 无法启动,它仍然会向 systemd 报告健康状态。

此外,在提供的示例中,我还尝试重现通常在 jetty.sh 中找到的一些有用功能。

相关内容