目标:以非 root 权限开机自启动。
以用户 utomcat 为例。所有 apache-tomcat 均以用户 utomcat 的身份启动。这样的好处是,可以把跑在 tomcat 上的 java 程序(站点)的维护工作,相对放心的交给一个普通运维人员,而不用担心运维人员不小心执行只有 root 用户才能执行的危险命令。
另外,以 root 用户运行 tomcat 意味着跑在 tomcat 下的程序默认具有 root 权限,这是非常危险的。
撸开袖子,准备好开干…
创建 tomcat 用户组
1 | groupadd gtomcat |
创建 utomcat 用户
这个用户名中的“u”代表 user,在前面加一个“u”是为了跟组名 tomcat 区分开。
下面的命令将创建用户 utomcat 并将其加入到 tomcat 组,创建的同时,会默认会创建 utomcat 的主目录到 /home/utomcat,如果你想让主目录放在其他位置,可以使用 -d 参数1
useradd -s /bin/bash -g gtomcat utomcat
修改 utomcat 密码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19# passwd utomcat
Changing password for user utomcat.
You can now choose the new password or passphrase.
A valid password should be a mix of upper and lower case letters,
digits, and other characters. You can use an 8 character long
password with characters from at least 3 of these 4 classes.
An upper case letter that begins the password and a digit that
ends it do not count towards the number of character classes used,
unless disable_firstupper_lastdigit_check option is enabled.
A passphrase should be of at least 3 words, 12 to 30 characters
long, and contain enough different characters.
Alternatively, if noone else can see your terminal now, you can
pick this as your password: "wreck+Paul+night".
Enter new password: your password
以新用户 utomcat 登陆服务器。
下载最新的 apache-tomcat
wget http://apache.fayea.com/tomcat/tomcat-8/v8.5.16/bin/apache-tomcat-8.5.16.tar.gz
也可以以 root 身份登陆,从已经有 apache-tomcat 的目录 copy 至 /hopme/utomcat,然后修改所有者。1
chown -R utomcat:gtomcat /home/utomcat/
创建启动、关闭 apache-tomcat 的脚本
在用户 utomcat 所在目录添加 shell-script 目录,然后在 shell-script 目录添加如下两个 shell 脚本文件1
2
3
4# ~/ 代表用户所在目录
mkdir -p ~/shell-script
cd ~/shell-script/
vi start.sh
start.sh 内容:
1
2
3
4
5
6
7
8
9
10
11
12cd /home/utomcat/apache-tomcat/crm-api/bin/
./startup.sh
rm -rf /home/utomcat/apache-tomcat/crm-web/work/
cd /home/utomcat/apache-tomcat/crm-web/bin/
./startup.sh
cd /home/utomcat/apache-tomcat/gw/bin/
./startup.sh
cd /home/utomcat/apache-tomcat/crm-task/bin/
./startup.shshutdown.sh 内容:
1
2
3
4
5
6
7
8
9
10
11cd /home/utomcat/apache-tomcat/crm-api/bin/
./shutdown.sh
cd /home/utomcat/apache-tomcat/crm-web/bin/
./shutdown.sh
cd /home/utomcat/apache-tomcat/gw/bin/
./shutdown.sh
cd /home/utomcat/apache-tomcat/crm-task/bin/
./shutdown.sh
修改执行权限1
chmod +x *.sh
添加 tomcat 启动文件
以下切换至root用户操作。1
2cd /etc/init.d
vi tomcat
输入如下内容。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#/etc/rc.d/init.d/tomcatservice
#init script for tomcatservice precesses
#processname: tomcatservice
#chkconfig: 2345 86 16
#description: tomcatservice is a j2se server, Start up | shutdown the Tomcat servlet engine.
case $1 in
start)
su - utomcat -lc "sh /home/utomcat/shell-script/start.sh";;
stop)
su - utomcat -lc "sh /home/utomcat/shell-script/shutdown.sh";;
*)
echo "parameter error, usage:(start|stop)";;
esac什么?两个分号?是不是多写了一个?没看错吧?
是的,你没看错,就是要写两个分号^_^。如果不想以 utomcat 用户启动,要换成 root,则改成下面的脚本即可。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#/etc/rc.d/init.d/tomcatservice
#init script for tomcatservice precesses
#processname: tomcatservice
#chkconfig: 2345 86 16
#description: tomcatservice is a j2se server, Start up | shutdown the Tomcat servlet engine.
case $1 in
start)
su - root -lc "sh /home/utomcat/shell-script/start.sh";;
stop)
su - root -lc "sh /home/utomcat/shell-script/shutdown.sh";;
*)
echo "parameter error, usage:(start|stop)";;
esac设置权限
1
chmod +x tomcat
添加启动
1
2chkconfig --add tomcat
chkconfig tomcat on查看 tomcat 启动属性。
1
2# chkconfig --list|grep tomcat
tomcat 0:off 1:off 2:on 3:on 4:on 5:on 6:off上面 0-6 的含义,请看:chkconfig 用法 第8项。
可用如下命令启动/停止
1
2service tomcat start # 启动
service tomcat stop # 停止重启 OS,tomcat 服务会随 OS 一起启动。
关于非 root 用户启动 80 端口
如果将 tomcat 的端口改为 80 并以 utomcat 启动时,会得到下面的错误,因为非 root 用户不能访问 1024 以下的端口。1
Caused by: java.net.SocketException: Permission denied
可以通过 iptables 来中转,具体操作这里不细讲。
通常的做法,是用nginx来配置多个域名,每个域名可设置访问不同的端口,比如多个tomcat启动的应用。参考:nginx 配置相关