最近新接手一个网站建设项目,用java开发,以下两个需求:

1、Tomcat需要降权运行,不能以root用户运行,否则造成安全隐患。

2、Tomcat要运行在80端口或者443端口上。

第一个需求很好满足,主要是第二个需求。大家都知道,非root用户在CentOS7系统上,是不能使用1024以下端口的,好在Tomcat提供了解决方案,那就是jsvc

jsvc 是在Apache基金会下的daemon项目下开源项目,主要功能是可以使一些运行在普通用户下的java进程,获取一些root权限下的权利,最常见的需求就是降权的Tomcat能够使用80或者443端口了。

一:新建tomcat用户和组,更改文件夹权限

CentOS 7.5 操作系统下,非ROOT用户JSVC方式启动Tomcat8
[root@web ~]# groupadd tomcat
[root@web ~]# useradd -s /sbin/nologin -g tomcat tomcat
[root@web ~]# chown -R tomcat:tomcat /home/tomcat8/

二:编译JSVC

CentOS 7.5 操作系统下,非ROOT用户JSVC方式启动Tomcat8
编译jsvc
[root@web ~]# cd /home/tomcat8/bin/
[root@web bin]# tar -xzvf commons-daemon-native.tar.gz
[root@web bin]# cd commons-daemon-1.2.2-native-src/unix/
[root@web unix]# ./configure 
[root@web unix]# make
[root@web unix]# cp jsvc ../..

三:创建系统服务

vim /usr/lib/systemd/system/tomcat.service 
下方信息根据实际情况填写
[Unit]
Description=Apache Tomcat 8 Web Application Container
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/home/tomcat8/bin/tomcat.pid
Environment=CATALINA_PID=/home/tomcat8/bin/tomcat.pid
Environment=JAVA_HOME=/usr/local/java/jdk1.8.0_191
Environment=CATALINA_HOME=/home/tomcat8
Environment=CATALINA_BASE=/home/tomcat8
Environment=CATALINA_OPTS=

ExecStart=/home/tomcat8/bin/jsvc \
            -Dcatalina.home=${CATALINA_HOME} \
            -Dcatalina.base=${CATALINA_BASE} \
            -cp ${CATALINA_HOME}/bin/commons-daemon.jar:${CATALINA_HOME}/bin/bootstrap.jar:${CATALINA_HOME}/bin/tomcat-juli.jar \
            -user tomcat \
            -java-home ${JAVA_HOME} \
            -pidfile /home/tomcat8/bin/tomcat.pid \
            -errfile SYSLOG \
            -outfile SYSLOG \
            $CATALINA_OPTS \
            org.apache.catalina.startup.Bootstrap

ExecStop=/home/tomcat8/bin/jsvc \
            -pidfile /home/tomcat8/bin/tomcat.pid \
            -stop \
            org.apache.catalina.startup.Bootstrap
[Install]
WantedBy=multi-user.target

保存成功之后,我们就可以使用以下命令控制Tomcat了

启动 systemctl start tomcat   
停止 systemctl stop tomcat
重启 systemctl restart tomcat
查看状态 systemctl status tomcat 

如果systemctl start tomcat不能启动,可以systemctl status tomcat查看状态,然后根据具体信息进行排错。比如我就因为第一次没配置JAVA_HOME变量,导致启动失败,如下图。

CentOS 7.5 操作系统下,非ROOT用户JSVC方式启动Tomcat8
因为没配置JAVA_HOME,导致Tomcat启动失败

最后别忘记设置了开机自启了和开放防火墙对应端口。开机自启命令是 systemctl enable tomcat

相关文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系电话

176-8951-1878

微信
微信
分享本页
返回顶部
西藏巨腾信息技术有限公司提供拉萨网站建设、软件开发、小程序开发、APP开发、网络营销、在线推广、在线商城开发等服务,联系电话: 17689511878