我在 Centos 7 机器上运行 Tomcat 7,使用不同于默认的systemd
用户。我想这应该很容易实现,但我遇到了问题。webapp
tomcat
据我所知,有三个地方可以指定用户和组:
/etc/tomcat/tomcat.conf
/etc/sysconfig/tomcat
/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
、、)然后重新启动服务:chmod
setfacl
systemctl 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)