为 Tomcat 创建专门的用户
考虑到安全问题,不建议用 root 用户运行 Tomcat,所以我们为 Tomcat 创建一个独立用户,
1 2
| $ sudo useradd -d /usr/local/tomcat6 -s /sbin/nologin $ sudo chown -R tomcat:tomcat /usr/local/tomcat6
|
安装和配置 JDK1.6
从 Oracle 下载 jdk-6u45-linux-x64.bin,拷贝到 /usr/local/jdk
下,
1 2
| $ sudo chmod +x jdk-6u45-linux-x64.bin $ sudo ./jdk-6u45-linux-x64.bin
|
会生成路径 /usr/local/jdk/jdk1.6.0_45
,jdk文件都在其中。
安装和配置 Tomcat6
从 Apache 下载 apache-tomcat-6.0.37.tar.gz,
1 2 3 4
| $ sudo tar zxvf apache-tomcat-6.0.37.tar.gz $ sudo cp apache-tomcat-6.0.37/* /usr/local/tomcat6 $ sudo cd /usr/local/tomcat6 $ sudo chown -R tomcat:tomcat .
|
编辑环境变量
1 2
| $ sudo vim /etc/profile
|
在 export PATH USER ...
上方添加以下变量声明,
1 2 3 4 5
| JAVA_HOME=/usr/local/jdk/jdk1.6.0_45 JRE_HOME=/usr/local/jdk/jdk1.6.0_45/jre CLASS_PATH=.:$JAVA_HOME/lib CATALINA_HOME=/usr/local/tomcat6 CATALINA_BASE=$CATALINA_HOME
|
并在 export 后面追加新的内容,如下,
1 2
| export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL JAVA_HOME CATALINA_HOME export PATH=$PATH:/usr/local/bin:$JAVA_HOME/bin
|
使环境变量生效,
将 Tomcat 设置为开机启动
Tomcat 自带了 Apache 的 commons-daemon 包,编译其源码生成 jsvc 可执行文件,
1 2 3 4 5 6 7 8
| $ cd $CATALINA_HOME/bin $ sudo -u tomcat -H tar zxvf commons-daemon-native.tar.gz $ cd commons-daemon-1.0.15-native-src/unix $ sudo ./configure --prefix=/usr/local --with-java=/usr/local/jdk/jdk1.6.0_45 $ sudo -u tomcat -H cp jsvc ../.. $ cd ../.. $ sudo cp daemon.sh /etc/init.d/tomcatd $ sudo vim /etc/init.d/tomcatd
|
如上,我们将 daemon.sh
拷贝到 /etc/init.d/tomcatd
作为启动脚本,daemon.sh 是 Tomcat 提供的模板,可根据自己的情况稍加改动使用,在我的环境中我做了如下修改,
1.找到注释行:
在下面添加:
1 2 3
| JAVA_HOME=/usr/local/jdk/jdk1.6.0_45 CATALINA_HOME=/usr/local/tomcat6 CATALINA_BASE=/usr/local/tomcat6
|
2.在文件头添加 chkconfig 注释参数,添加后如下:
接着将 tomcatd 注册到系统服务,并设置为自动启动,
1 2
| chkconfig --add tomcats chkconfig tomcats on
|
问题及处理
*启动 Tomcat 报异常:“java.lang.NoClassDefFoundError: org.apache.catalina.mbeans.ServerLifecycleListener”
一开始使用 yum 安装的 java 是 1.5 的版本,但是 Tomcat6 是在 JDK6 的版本上开发的,所以发生异常,重新安装 JDK6 之后就不再出现了。
*Tomcat 可以启动运行,但是日志中存在错误信息:“Failed to get local InetAddress for VMID” “java.net.UnknownHostException”
这个是因为 JAVA 无法通过在 /etc/sysconfig/network 中配置的 HOSTNAME 找到对应的 IP,只需要修改 /etc/hosts 即可,在 127.0.0.1 后面增加配置的 HOSTNAME 即可。