在不同用户(Centos 7)下运行 Tomcat 的正确方法是什么?

在不同用户(Centos 7)下运行 Tomcat 的正确方法是什么?

我在 Centos 7 机器上运行 Tomcat 7,使用不同于默认的systemd用户。我想这应该很容易实现,但我遇到了问题。webapptomcat

据我所知,有三个地方可以指定用户和组:

  1. /etc/tomcat/tomcat.conf
  2. /etc/sysconfig/tomcat
  3. /lib/systemd/system/tomcat.service

最新的tomcat.service确实具有默认设置

User=tomcat
Group=tomcat

我可以更改。问题是tomcat.service每次更新时文件都会被覆盖。这种情况不会发生tomcat.conf(这里tomcat.conf.rpmnew创建了一个)。但是,我不知道如何在那里覆盖用户。

这种行为对我来说似乎很奇怪。这是否意味着我不应该编辑tomcat.service?哪种自定义方式是推荐的tomcat.service

答案1

根据 systemd文档您应该创建目录/lib/systemd/system/tomcat.service.d并将带有.conf扩展名的文件放在其中,然后向该文件添加用户和组所需的更改:

[Service]
User=webapp
Group=webapp

此后,您对服务的更改将是永久性的,因为它们存储在单独的位置,更新后不会更改。该解决方案是为您这样的情况创建的,当您想要更改.service文件中的服务参数时,但每次更新后它都会用新文件重写。

答案2

该文件/lib/systemd/system/tomcat.service不应更改。如果您需要覆盖它们,只需将文件复制到/etc/systemd/system/tomcat.service,然后编辑该/etc/systemd/system/tomcat.service文件即可。

更改文件后,要求 systemd 重新加载配置:

systemctl daemon-reload

更改权限,以便用户可以访问 tomcat 文件(chown、、)然后重新启动服务:chmodsetfaclsystemctl restart tomcat

编辑: 您可以让不同的 $CATALINA_BASE 指向 /opt 中您的应用程序所在的子文件夹。$CATALINA_HOME 将指向 rpm 安装 tomcat 的位置。这样,当您升级 tomcat 包时,所有 tomcat 实例都将升级。在以下位置搜索“高级配置 - 多个 Tomcat 实例”https://tomcat.apache.org/tomcat-7.0-doc/RUNNING.txt 如果您使用此设置,$CATALINA_HOME 应由 root 拥有,并且 tomcat 或任何其他用户没有写入权限,并且 $CATALINA_BASE 应由您的应用程序用户拥有(例如 tomcat-myapp)

相关内容