Linux安装Tomcat
linux安装tomcat之前,先使用命令java -version查看java版本,因为有些linux已经默认安装了Open JDK,如果没有出现java相关信息,则不用管了,如果出现,我们需要替换掉默认安装的JDK;
卸载 1、卸载用 bin文件安装的JDK方法: 删除/usr/java目录下的所有东西
2、卸载系统自带的jdk版本方法: 查看自带的jdk: #rpm -qa | grep jdk
#rpm -qa | grep gcj
查看并删除
#rpm -qa|grep jdk
看到如下信息: libgcj-4.1.2-44.el5 java-1.4.2-gcj-compat-1.4.2.0-40jpp.115 使用rpm -e --nodeps 命令删除上面查找的内容: #rpm -e –nodeps java-1.4.2-gcj-compat-1.4.2.0-40jpp.115
3、卸载rpm安装的jkd版本 查看安装的jdk: #rpm -qa|grep jdk 看到如下信息: java-1.6.0-openjdk-1.6.0.0-0.25.b09.el5 jdk-1.6.0_16-fcs 卸载: #rpm -e --nodeps jdk-1.6.0_16-fcs
卸载完jdk之后,再使用命令java -version无信息,后提示找不到命令说明卸载完成!
将自己下载的Oracle jdk上传到linux上,tar zxvf jdk-7u79-linux-x64.gz 解压缩至当前目录
下载tomcat到linux 同样命令进行解压
接下来设置环境变量
vi /etc/profile
JAVA_HOME=/rommr/jdk1.6.0_45 PATH=$JAVA_HOME/bin:$PATH CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar CATALINA_HOME=/rommr/tomcat7 #其他的是jdk配置 重要的就是这点 export JAVA_HOME CATALINA_HOME #这点ok export PATH export CLASSPATH
以上配置完后执行: source /etc/profile 配置文件生效
下面这几步比较重要,因为在许多linux系统中都预装了openjdk,所以即使上面进行了这些设置,系统默认的还不是我们要设置的内容;如果要真正使用我们自己的jdk,还需要一下步骤: sudo update-alternatives --install /usr/bin/java java /usr/java/jdk1.7.0_67-cloudera/bin/java 300 sudo update-alternatives --install /usr/bin/javac javac /usr/java/jdk1.7.0_67-cloudera/bin/javac 300
以上代码是为了成功替换linux自带的jdk,执行完成之后使用命令java -version出现jdk版本,说明替换jdk成功 (这里的300只是标识一下,没什么意义,只是下一步要用到) 红色部分自行修改目录(你安装JDK的目录)
以上都配置正确,则进入tomcat bin目录
vi catalina.sh
查找:OS specific support. $var _must_ be set to either true or false
然后添加以下内容:
CATALINA_HOME=/usr/local/apache-tomcat-6.0.30/
红色部分为你的tomcat目录
接着设置权限 chmod +x *.sh
启动tomcat : ./startup.sh
查看tomcat是否启动成功
如果出现如下错误信息
表示tomcat找不到jdk或者jre路径。
因为启动tomcat会调用tomcat安装文件中的startup.sh,而它调用了catalina.sh则调用了setclasspath.sh。因此需要在setclasspath.sh开头手动声明环境变量。
具体路径根据自己的实际情况来配置,再次启动如果没有什么问题的话
进入tomcat log目录,查看catalina.out内容看有无报错,报错说明启动失败;
或者命令 ps -ef|grep tomcat
如果仅仅出现一行信息:如
root 29124 27221 0 13:29 pts/0 00:00:00 grep tomcat
说明启动失败,查看日志,查找问题出现在哪里。
如果出现如下信息说明启动成功
root 28926 1 1 13:03 pts/0 00:00:16 /usr/local/jdk1.7/bin/java -Djava.util.logging.config.file=/usr/local/tomcat7/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.endorsed.dirs=/usr/local/tomcat7/endorsed -classpath /usr/local/tomcat7/bin/bootstrap.jar:/usr/local/tomcat7/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat7 -Dcatalina.home=/usr/local/tomcat7 -Djava.io.tmpdir=/usr/local/tomcat7/temp org.apache.catalina.startup.Bootstrap start
root 29124 27221 0 13:29 pts/0 00:00:00 grep tomcat
根据进程查看端口号
sudo netstat -naop | grep 28926
这是查看pid为2896的进程占用的端口号
[root@instance_4dbde0 bin]# sudo netstat -naop | grep 28926 tcp 0 0 ::ffff:127.0.0.1:8005 :::* LISTEN 28926/java off (0.00/0/0) tcp 0 0 :::8009 :::* LISTEN 28926/java off (0.00/0/0) tcp 0 0 :::8080 :::* LISTEN 28926/java off (0.00/0/0) unix 2 [ ] STREAM CONNECTED 189798 28926/java
可以看到8009和8088端口号被占用,其中8009是tomact Server的SHUTDOWN的端口号,8080是tomcat的CATALINA Service的Connector的端口号。
根据端口号查看进程
sudo lsof -i:8088
[root@instance_4dbde0 bin]# sudo lsof -i:8080 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME java 28926 root 42u IPv6 189800 0t0 TCP *:webcache (LISTEN)
可以查看到占用端口号的进程
根据进程号杀死进程
kill -9 14177
杀死进程号为14177的tomcat进程
启动tomcat完成后,输入linux服务器的ip加端口号,看能否打开默认的tomcat管理页,如果不能打开,有可能是linux防火墙打开了
查看防火墙配置(需要root权限)
[root@localhost ~]# service iptables status
Table: filter Chain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 5 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
关闭防火墙(需要root权限)
[root@instance_4dbde0 bin]# service iptables stop iptables: Setting chains to policy ACCEPT: filter [ OK ] iptables: Flushing firewall rules: [ OK ] iptables: Unloading modules: [ OK ]
再次输入地址,即可打开tomcat默认管理页(这种方式关闭防火墙只是临时关闭,重启后防火墙还会继续开启)
永久关闭防火墙,重启后不开启
[root@instance_4dbde0 bin]# chkconfig iptables off
centos从7开始默认用的是firewalld,这个是基于iptables的,虽然有iptables的核心,但是iptables的服务是没安装的。所以你只要停止firewalld服务即可:
[root@instance_290388 bin]# service firewalld stop
Redirecting to /bin/systemctl stop firewalld.service
将自己的java项目,打成war包,maven项目使用命令 mvn clean install得到war包,
将该war包上传到linux下tomcat下wapapps目录下;重启tomcat
[root@instance_4dbde0 bin]# ./startup.sh Using CATALINA_BASE: /usr/local/tomcat7 Using CATALINA_HOME: /usr/local/tomcat7 Using CATALINA_TMPDIR: /usr/local/tomcat7/temp Using JRE_HOME: /usr/local/jdk1.7 Using CLASSPATH: /usr/local/tomcat7/bin/bootstrap.jar:/usr/local/tomcat7/bin/tomcat-juli.jar
然后,输入ip端口号加上斜杠项目名 如 http://111.111.111.111:8080/demo
即可访问项目;
如果需要使用默认端口,如80或者其他端口
进入tomcat conf目录修改conf目录下的文件server.xml,修改Connector元素(Tomcat的默认端口是8080),需要重新启动Tomcat服务生效.
# vi /usr/local/tomcat/server/conf/server.xml <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
如果想直接同ip访问项目,则进入tomcat conf目录修改conf目录下的文件server.xml
1、在tomcat的server.xml中将端口改成80
<Connector port="80" protocol="HTTP/1.1" maxThreads="600" minSpareThreads="100" maxSpareThreads="500" acceptCount="700" connectionTimeout="20000" redirectPort="8443" />
2、在tomcat的server.xml中在
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> </Host>
中间加上
<Context path="" docBase="/user/local/Tomcat7/webapps/Menu" debug="0" reloadable="true" />
下面的,项目名是Menu,所以只需要把项目的地址放在docBase中就OK了。注意改成自己的目录
将用红笔标注的部分的值改为true,重启tomcat即可!
cd /etc/init.d
vi tomcat.sh
在改脚本中插入如下代码,注意改成自己的路径
#!/bin/bash # # tomcat startup script for the Tomcat server # # chkconfig: 345 80 20 # description: start the tomcat deamon # # Source function library . /etc/rc.d/init.d/functions prog=tomcat JAVA_HOME=/usr/local/jdk1.8 export JAVA_HOME CATALINA_HOME=/usr/local/tomcat8 export CATALINA_HOME case "$1" in start) echo "启动Tomcat..." $CATALINA_HOME/bin/startup.sh ;; stop) echo "关闭Tomcat..." $CATALINA_HOME/bin/shutdown.sh ;; restart) echo "重启Tomcat,正在关闭..." $CATALINA_HOME/bin/shutdown.sh sleep 2 echo echo "重启 Tomcat,正在启动..." $CATALINA_HOME/bin/startup.sh ;; log) echo "查看Tomcat启动日志..." tail -f $CATALINA_HOME/logs/catalina.out ;;
status)
status=$(ps -ef|grep -w tomcat|grep -v $0 | grep -v grep|awk '{print $2}')
if [ "$status" = "" ];
then
echo "tomcat未运行"
else
echo "tomcat正在运行"
echo "$status"
fi
;;
*) echo "Usage: $prog {start|stop|restart|log}" ;; esac exit 0
红色部分,改成自己的路径,使用命令
chmod 777 tomcat7.sh
使其变成可执行文件
这个时候,在当前路径 /etc/init.d下执行
./tomcat start
即可启动tomcat
同时使用命令:
启动服务./tomcat.sh start 停止服务./tomcat.sh stop 查看日志:启动服务./tomcat.sh restart
还有就是可以设置脚本开机自启
chkconfig tomcat.sh on
但是使用这个命令还是不太方便,需要找到层层路径,再执行命令
好的:
vi /etc/profile
修改/etc/profile 加入一行:
export PATH=$PATH:/脚本目录/
保存,退出后,执行命令
source profile
即可在任意目录下使用命令了
tomcat.sh start
tomcat.sh stop
tomcat.sh restart
查看tomcat日志
1、先切换到:cd usr/local/tomcat7/logs
tail -f catalina.out
这样运行时就可以实时查看运行日志了;tail是查看命令,-f是倒序看
Ctrl+c 是退出tail命令。
安装好tomcat,我们需要登录到tomcat 的web控制台来进行一些操作,这个时候需要设置用户名密码;
[root@instance_4dbde0 conf]# cd /usr/local/tomcat7/conf/
[root@instance_4dbde0 conf]# vi tomcat-users.xml
找到<tomcat-users></tomcat-users>,删除注释,进行设置用户名密码以及角色
#例如,要将manager-gui角色添加到名为 tomcat的密码为s3cret的用户,请将以下内容添加到上面列出的配置文件中。
<role rolename =“manager-gui”/>
<user username =“tomcat”password =“s3cret”roles =“manager-gui”/>
请注意,对于Tomcat 7以后,使用管理器应用程序所需的角色已从单一管理员角色更改为以下四个角色。您将需要分配您希望访问的功能所需的角色。 manager-gui - 允许访问HTML GUI和状态页面 manager-script - 允许访问文本界面和状态页面 manager-jmx - 允许访问JMX代理和状态页面 管理员状态 - 只允许访问状态页面
具有manager-gui角色的用户不应被授予manager-script或manager-jmx角色。
如果通过浏览器访问文本或jmx接口(例如,用于测试,因为这些接口仅用于非人类的工具),则之后必须关闭浏览器以终止会话。
有时候本地和服务器连接的是同一台数据库,但是会出现本地中文不乱码,而服务器上中文乱码,可以参考这个链接
http://blog.csdn.net/lengjinghk/article/details/51938644
需要注意的是:即使配置了tomcat-users.xml 打开tomcat管理页面也有可能出现403无权限:
解决方法:
root@ubuntu:/usr/local/tomcat8/conf/Catalina/localhost# pwd /usr/local/tomcat8/conf/Catalina/localhost #如果没有manager.xml配置文件,则新建 root@ubuntu:/usr/local/tomcat8/conf/Catalina/localhost# ls manager.xml root@ubuntu:/usr/local/tomcat8/conf/Catalina/localhost# vi manager.xml
编辑manager.xml配置文件,将内容替换成下面的代码,如需重启tomcat即可访问tomcat管理页面
<Context privileged="true" antiResourceLocking="false" docBase="${catalina.home}/webapps/manager"> <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" /> </Context>
Linux配置多台Tomcat
有时候需要在一台机器上配多个Tomcat,例如安装jenkins,要求容器内不能有其他应用,这个时候就要安装两个tomcat了
首先:第一个安装的Tomcat不用管它,主要修改第二个tomcat
首先将第二个tomcat解压到一个文件夹,重命名如:tomcat7_2
使用命令,修改配置文件
[root@instance_4dbde0 webapps]# vi /etc/profile
修改如下
执行命令
#使环境变量立即生效
[root@instance_4dbde0 webapps]# source /etc/profile
进入第二台tomcat的目录进行修改
#进行端口修改 [root@instance_4dbde0 webapps]# cd /usr/local/tomcat7_2/conf/server.xml
修改server.xml配置和第一个不同的启动、关闭监听端口
接受服务器关闭指令的端口号,我们叫关闭指令端口
<Server port="8005" shutdown="SHUTDOWN"> 把端口改为9005
http请求处理端口,我们在网页上输入的普通url地址包含的端口就是他 .这个端口叫http端口
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> 把8080端口改为8384
https请求的处理端口.这个端口叫https端口
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> 把8080端口改为8283(如果不用Https的话,可以不用改)
接收AJP协议的处理端口.这个端口叫ajp端口
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> 把8009端口改为9009
修改之后进行保存;
命令:
[root@instance_4dbde0 webapps]# vi /usr/local/tomcat7_2/bin/catalina.sh
打开catalina.sh ,tomcat/bin/找到下面黄字,在下面增加如下代码
# OS specific support. $var _must_ be set to either true or false.
# myself : add
export CATALINA_BASE=$CATALINA_BASE_2
export CATALINA_HOME=$CATALINA_HOME_2
接着命令
[root@instance_4dbde0 webapps]# vi /usr/local/tomcat7_2/bin/startup.sh
在文件末尾追加以下内容
export JAVA_HOME=/usr/local/jdk1.7 export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib:$JAVA_HOME/bin export CATALINA_HOME=$CATALINA_HOME_2 export CATALINA_BASE=$CATALINA_BASE_2
同时对当前目录下的shutdown.sh做同样处理
处理完成后执行命令
#对文件进行赋予权限 [root@instance_4dbde0 bin]# pwd /usr/local/tomcat7_2/bin [root@instance_4dbde0 bin]# chmod +x *.sh
之后进入bin目录,启动Tomcat即可,注意访问时端口号是你改的端口号
[root@instance_4dbde0 bin]# cd /usr/local/tomcat7_2/bin/ [root@instance_4dbde0 bin]# ./startup.sh Using CATALINA_BASE: /usr/local/tomcat7_2 Using CATALINA_HOME: /usr/local/tomcat7 Using CATALINA_TMPDIR: /usr/local/tomcat7_2/temp Using JRE_HOME: /usr/local/jdk1.7 Using CLASSPATH: /usr/local/tomcat7/bin/bootstrap.jar:/usr/local/tomcat7_2/bin/tomcat-juli.jar Tomcat started. [root@instance_4dbde0 bin]#
为Tomcat指定JDK
有时候会遇到一个问题需要为Tomcat指定一个JDK版本,我就遇到了这样一个情况,有一个别人写的项目,只能用JDK8的环境(用jdk1.7无法运行),但是我原有tomcat用的是JDK1.7,如果都换成jdk8的话,那原有项目就不能用了,
解决方案:
1.下载JDK1.8 进行解压缩 2.复制原有的tomcat,再保存一份,起个别名,我这里直接下载了tomcat8 3.我把工具都放在了/usr/local/ 路径下
可以看到了我现在的目录结构了。
默认的话,如果你配置了jdk tomcat环境变量,那么你启动tomcat的时候是会去读取你的环境变量的,那么现在使用命令
[root@instance_290388 bin]# vi /usr/local/tomcat8/bin/catalina.sh
找到 OS specific support. $var _must_ be set to either true or false.
添加如下代码
方框框选的就是,你新下载的JDK和新的tomcat,我在这里是写死的,当然你也可以把新安装的JDK,tomcat加入环境变量,然后这边直接引用变量就行了,
好了,下载启动tomcat8
可以看到,启动的jdk版本是1.8,使用的tomcat是8,解决问题。
为了更有说服力,我们启动tomcat7,注意端口冲突
可以看到,他读取了环境变量中配置的tomcat和jdk,所以启动的是1.7的jdk和tomcat7!
最后注意改tomcat8 的端口号,就可以在不影响原项目的基础上运行新项目了。
使用Xshell连接Linux时,传文件一般使用xftp,如果没有该工具,则安装lrzsz包安装完成后包括上传rz、下载sz命令;只需要安装这个包即可。那么使用命令安装
yum install -y lrzsz
从Windows上传文件,上传命令为rz;在Linux命令行下输入rz,上传的文件在当前命令行的目录下;
输入rz命令后,会弹出对话框,选择你要上传的文件,选择打开就上传到Linux主机。上传完可以使用ls 查看;
从Linux主机下载文件,下载命令为sz ,后面跟要下载的文件名;可以选择下载的保存文件夹;
此方法相对来说比较简单快捷,可以满足日常需要