该问题的几个已发布答案是正确的,可能需要结合使用。还设置 JETTY_USER 可能有一些间接要求。
以 root 以外的用户身份运行 jetty 需要正确的权限,允许该用户访问某些文件/目录/树。这些文件系统对象包括<jetty-home>
树,以及 any/var/run/jetty
或 where JETTY_RUN
,如果不保留默认为JETTY_START_LOG
,JETTY_LOGS
则设置为/var/run/jetty
。
通过设置以用户身份运行 jetty JETTY_USER
(例如JETTY_USER=jetty
,以非 root 身份运行 OS 服务)还要求 OS 用户/var/sh
在 /etc/passwd 中设置有效的 shell(例如)。一个好的做法是将该用户设置为具有无效的 shell(例如/usr/sbin/nologin
),从而关闭该服务用户的安全漏洞以允许登录。在这种情况下,jetty 启动环境还必须设置 JETTY_SHELL(例如JETTY_SHELL=/bin/sh
),为执行 jetty 可执行文件的非登录会话提供 shell。
这些设置可以在服务启动脚本中进行(例如/etc/init.d/jetty
,默认情况下它们被注释掉的地方),但最好将它们设置在 中/etc/default/jetty
,不要理会启动脚本,因为它包含逻辑和其他内容最好不要受到干扰。
另请注意,以 root 身份运行 jetty,例如在不更改配置的 jetty 运行时用户的情况下将其作为服务启动,将创建 root 拥有的文件(如日志文件)。将运行时用户更改为非 root 用户可能会导致 jetty 失败,因为它试图以非 root 用户身份重写 root 拥有的文件。例如<jetty-base>/logs/<YYYY>_<MM>_<DD>.jetty.log
. 要解决该问题,必须将该文件的所有者更改为非 root 用户或将其删除。
请注意,当码头由于这些问题而无法启动时,它不会写入日志(无法访问,码头实际上并未运行),仅输出Starting Jetty: FAILED <datetime>
.