环境:Centos6.6 Tomcat6.44 JDK1.7.072
在Cenots下使用yum install tomcat6 默认情况下开机自启是通过root高权限启动的,非常危险,如果要使用指定的低权限用户开机自启该怎么办?在tomcat6的官方资料中简单的提了一句,但是不详细,(http://tomcat.apache.org/tomcat-6.0-doc/setup.html)现在是我尝试一天后成功的过程。
如果用普通用户使用yum安装tomcat6的话
1)通过yum自动安装tomcat和dependences
root@Centos_AAA ~]$sudo yum install tomcat6
[root@Centos_AAA ~]$ sudo service tomcat6 start
[root@Centos_AAA ~]$sudo chkconfig tomcat6 on
[root@Centos_AAA ~]#$ sudo yum install tomcat6-webapps
[root@Centos_AAA webapps]$sudo yum install tomcat6-admin-webapps
如果访问http://192.168.0.120:8080/访问不了那大多是防火墙经用了8080端口,解决方法如下:
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 8080 -j ACCEPT
如果安装正确的话,可以在browser中看到tomcat的默认的page。
2) 配置tomcat
配置文件:/etc/tomcat6/tomcat6.conf + /etc/sysconfig/tomcat6
tomcat home目录: /usr/share/tomcat6
配置tomcat为admin和manager用户:
修改文件/usr/share/tomcat6/conf/tomcat-users.xml
安装成功后开机自启确实是以tomcat用户权限启动的,但是想要关闭重启tomcat服务还是需要用root或者sudo命令,无法用普通用户权限操作tomcat
下面是手动安装tomcat
一,手动安装自己的JDK环境
这个不多讲,可以看我的其他博客有详细的介绍:http://blog.csdn.net/dj1174232716/article/details/46609995
简单说就是下载JDK源码,然后设置环境变量,我实在/etc/profile中设置全局环境变量的。这里我安装在/usr/java/jdk1.7
二,新建普通权限用户
#useradd test
#passwd test
新建用户时会默认生成一个一样名称的用户组,后面我们以test用户启动tomcat,所以test用户时什么权限,tomcat就是什么权限
三,安装Tomcat6
尽量不要用yum install tomcat6安装tomcat6,缺少很多东西的,这里手动安装tomcat6,先下载apache-tomcat-6.0.44.tar.gz然后解压到安装目录,这里我解压到/usr/local/tomcat6,tomcat自带的jsvc源码需要自己编译安装的,
编译jsvc源码需要gcc,autoconf和JDK,首先进入tomcat的bin目录:
#cd /usr/local/tomcat6/bin
#tar zxvf commons-daemon-native.tar.gz
#cd commons-daemon-native/unix
#autoconf
#./configure --with-java=/usr/java/jdk1.7 (注意,编译时一定要指定自己的java home)
#make
#cp jsvc ../.. (将jsvc复制到bin目录下,可能还会要将jsvc复制到/etc/bin目录下,自己新建一个/etc/bin目录)
#cd ../..
更改tomcat6的用户和用户组及其权限
#chown -R test:test /usr/local/tomcat6
#chmod -R 711 /usr/local/tomcat6
然后就可以通过命令运行tomcat的守护进程
#/usr/local/bin/jsvc -usr test -classpath $CATALINA_HOME/bin/bootstrap.jar -outfile $CATALINA_BASE/logs/catalina.out -errfile $CATALINA_BASE/logs/catalina.err -Dcatalina.home=$CATALINA_HOME -Dcatalina.base=$CATALINA_BASE -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties org.apache.catalina.startup.Bootstrap
前提是上面命令中的环境变量都存在,$CATALINA_HOME=$CATALINA_BASE=/usr/local/tomcat6,也可以将决定路径写进去,避免出错。-user就是指定以什么用户启动的,默认是那个用户执行这条命令就是以那个用户启动
四,开机自启
上面的命令开机后执行没问题,但是放在/etc/rc.local甚至是crontab中执行就起不来,很奇怪,后来发现是环境变量的问题,就是在crontab中是有自己的环境变量,不会加载/etc/profile中的环境变量,导致执行时找不到JAVA_HOMAE,放在/etc/rc.local中也不执行是因为/etc/rc.local执行是在加载环境变量之前的,/etc/profile是在登录时在加载的,所以可以在/etc/rc.local中添加source /etc/profile提前加载环境变量就可以了。但是需要注意的是,这种方式启动的tomcat是守护进程,普通用户无法关闭,还是要有root用户才能关闭。
至于jsvc不同的tomcat版本所在的位置不一样,具体看tomcat的官方文档。