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

我在我的Centos 7机器上运行Tomcat 7,使用systemd ,在与默认tomcat不同的用户webapp下运行。 我想这应该很容易做到这一点,但我有问题。

从我看到的有三个地方可以指定用户和组:

  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创build一个tomcat.conf.rpmnew )。 但是,我不明白我可以覆盖用户那里。

这种行为对我来说似乎很陌生。 这是否意味着我不应该编辑tomcat.service ? 推荐使用哪种方式来定制tomcat.service

根据systemd 文档,您应该创build目录/lib/systemd/system/tomcat.service.d并将.conf扩展名放在那里,然后添加到该文件需要更改用户和组:

 [Service] User=webapp Group=webapp 

在此之后,对服务的更改将是永久的,因为它们存储在不同的位置,更新后不会更改。 这个解决scheme是为你的情况而创build的,当你想要改变.service文件中的服务参数时,但是每次更新之后都会用新文件重写。

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

更改文件后,请systemd重新加载configuration:

 systemctl daemon-reload 

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

编辑:你可以有一个不同的$ CATALINA_BASE指向应用程序所在的/ opt的子文件夹。 $ CATALINA_HOME将指向以rpm安装tomcat的位置。 用这种方法升级tomcat包时,tomcat的所有实例都会升级。 在https://tomcat.apache.org/tomcat-7.0-doc/RUNNING.txt中search“高级configuration – 多个Tomcat实例”如果使用这个设置,那么$ CATALINA_HOME应该被root用户所拥有,而没有tomcat的写权限或者任何其他用户,$ CATALINA_BASE应该由您的应用程序用户拥有(例如tomcat-myapp)