Centos下Tomcat以指定的用户,非root权限开机自启
安装tomcat
tomcat解压就能用 安装包可以从官网上下载。
[root@template tmp]@H_502_8@# wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-7/v7.0.69/bin/apache-tomcat-7.0.69.tar.gz
解压
[root@template tmp]@H_502_8@# tar -zxvf Nginx-1.9.15.tar.gz -C /usr/local/
启动 注意这里我重命名了解压出来的文件夹名apache-tomcat-7.0.69为tomcat7
[root@template local]@H_502_8@# mv apache-tomcat-7.0.69 tomcat7
[root@template bin]@H_502_8@# cd /usr/local/tomcat7/bin/
[root@template bin]@H_502_8@# ./startup.sh
关闭
[root@template bin]@H_502_8@# ./shutdown.sh
设置开机启动root用户 建议看下面更新部分 Tomcat以指定的用户,非root权限开机自启
增加开机启动服务 从安装oracle开机启动学的 脚本比较low
具体编辑脚本
vim /etc/init.d/tomcat7 @H_502_8@#创建新文件
tomcat7是我自己取得名字
@H_502_8@#!/bin/bash
@H_502_8@# oracle: Start/Stop tomcat7
@H_502_8@# chkconfig: 345 90 10
@H_502_8@# description: tomcat .
JAVA_HOME=/usr/local/jdk1.7.0_79
JRE_HOME=$JAVA_HOME/jre
. /etc/rc.d/init.d/functions
LOCKFILE=/var/lock/subsys/tomcat7flag
TOMCAT_HOME=/usr/local/tomcat7/
TOMCAT_USER=root
case "$1" in
'start')
if [ -f $LOCKFILE ]; then
echo $0 already running.
exit 1
fi
echo -n $"Starting tomcat! "
/usr/local/tomcat7/bin/startup.sh
touch $LOCKFILE
;;
'stop')
if [ ! -f $LOCKFILE ]; then
echo $0 already stopping.
exit 1
fi
echo -n $"Stopping tomcat! "
/usr/local/tomcat7/bin/shutdown.sh
rm -f $LOCKFILE
;;
'restart')
$0 stop
$0 start
;;
'status')
if [ -f $LOCKFILE ]; then
echo $0 started.
else
echo $0 stopped.
fi
;;
*)
echo "Usage: $0 [start|stop|status]"
exit 1
esac
exit 0
修改/etc/init.d/tomcat7服务文件权限
[root@CentOS init.d]# chmod 755 /etc/init.d/tomcat7
#chkconfig --add tomcat7
说明 如果脚本没写好 可能出现
service myservice does not support chkconfig
解决办法
添加下面两句到 #!/bin/bash 之后。
# chkconfig: 2345 10 90
# description: myservice ....
设置为开机启动
如果提示
[root@template sbin]@H_502_8@# service tomcat7 stop
Stopping tomcat! Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
At least one of these environment variable is needed to run this program
tomcat中需要做如下修改
vim /usr/local/tomcat7/bin/startup.sh
添加如下环境变量
export JAVA_HOME=/usr/local/jdk1.7.0_79
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:.
export PATH=$PATH:$JAVA_HOME/bin
export CATALINA_HOME=/usr/local/tomcat7
[root@CentOS ~]# chkconfig tomcat7 on
进行service tomcat7 start/stop/restart测试
还有一种简单的办法 直接在启动文件中加启动命令
在/etc/rc.d/rc.local中加入:
/usr/local/tomcat7/bin/startup.sh
Tomcat以指定的用户,非root权限开机自启
2016年5月29日16:44:25 更新 tomcat非root运行
以上安装无法指定启动Tomcat服务的用户,会导致Tomcat以超级用户运行,存在重大的安全隐患!
在Linux下,Tomcat可以作为一个守护进程来启动以及停止,这个必须借助于项目commons-daemon中的jsvc工具。Tomcat安装完后就带有这个工具的源码{tomcat}/bin/下。按照下列命令安装这个工具:
[root@template ~]@H_502_8@# cd /usr/local/tomcat7/bin/
[root@template bin]@H_502_8@# tar -zxvf commons-daemon-native.tar.gz
@H_502_8@#解压出来文件名commons-daemon-1.0.15-native-src
[root@template unix]@H_502_8@#cd
/usr/local/tomcat7/bin/commons-daemon-1.0.15-native-src/unix
@H_502_8@#自己的java home echo $JAVA_HOME可以查看到,如没有请先配置参考上篇centos搭建java环境
[root@template unix]@H_502_8@# ./configure --with-java=/usr/local/jdk1.7.0_79
[root@template unix]@H_502_8@# make
@H_502_8@#make后,会在当前文件夹下生成一个名为 jsvc 的文件,将其复制到/bin目录
[root@template unix]@H_502_8@# cp jsvc /usr/local/tomcat7/bin/
@H_502_8@#删掉我之前useradd建的tomcat7用户
[root@template ~]@H_502_8@# userdel -r tomcat7
@H_502_8@#添加一个用来运行Tomcat的用户,不允许登录
[root@template ~]@H_502_8@# useradd tomcat7 -M -d / -s /usr/sbin/nologin
@H_502_8@#回到/bin目录下
[root@template unix]@H_502_8@# cd /usr/local/tomcat7/bin/
@H_502_8@#接下来便是修改/bin目录下的 daemon.sh 文件
vim daemon.sh
@H_502_8@#脚本开始添加
TOMCAT_USER=tomcat7
JAVA_HOME=/usr/local/jdk1.7.0_79
@H_502_8@#赋予执行权限 之前复制过来的jsvc所有者还是root所以这步建议靠后执行
[root@template bin]@H_502_8@# chown -R tomcat7:tomcat7 /usr/local/tomcat7/
@H_502_8@#启动一下
[root@template bin]@H_502_8@# ./daemon.sh start
看看有没有正常启动
[root@template bin]@H_502_8@# netstat -lnp |grep 8080
tcp 0 0 :::8080 :::* LISTEN 3208/jsvc.exec
@H_502_8@#也可以这样看一下 注:之前配了Nginx代理到8080端口 如没有需加127.0.0.1:8080得到的应该是tomcat主页
[root@template bin]@H_502_8@# curl 127.0.0.1
启动成功然后需要设置Tomcat为Service
创建 $CATALINA_HOME/bin/daemon.sh 的一个链接到 /etc/init.d/ 下,service名为tomcat7
注意这里之前我配置过一个自启动的先删掉,有点舍不得 还是移到备份目录
[root@template bin]@H_502_8@# mkdir /home/backupFiles
[root@template bin]@H_502_8@# mv /etc/init.d/tomcat7 /home/backupFiles/
[root@template bin]@H_502_8@# ln -s /usr/local/tomcat7/bin/daemon.sh /etc/init.d/tomcat7
@H_502_8@#试一试 结果正常
[root@template bin]@H_502_8@# service tomcat7 stop
添加到chkconfig
[root@template bin]@H_502_8@# chkconfig --list |grep tomcat
[root@template bin]@H_502_8@# chkconfig --add tomcat7
service tomcat7 does not support chkconfig
有经验了,修改脚本就好了 参考上篇centos服务器配置java环境
增加开机启动服务 部分
vim /etc/init.d/tomcat7
添加下面两句到 #!/bin/bash 之后。
# chkconfig: 2345 10 90
# description: myservice ....
再次执行添加,成功后设置开机启动。重启验证一下
[root@template bin]@H_502_8@# chkconfig --add tomcat7
[root@template bin]@H_502_8@# chkconfig tomcat7 on
[root@template bin]@H_502_8@# reboot
@H_502_8@#搞定,收工!
[root@template ~]@H_502_8@# netstat -lnp |grep 8080
tcp 0 0 :::8080 :::* LISTEN 1445/jsvc.exec