如题

目标:以非 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

  1. start.sh 内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    cd /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.sh
  2. shutdown.sh 内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    cd /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
2
cd /etc/init.d
vi tomcat

  1. 输入如下内容。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #!/bin/bash
    #/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

    什么?两个分号?是不是多写了一个?没看错吧?
    是的,你没看错,就是要写两个分号^_^。

  2. 如果不想以 utomcat 用户启动,要换成 root,则改成下面的脚本即可。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #!/bin/bash
    #/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
  3. 设置权限

    1
    chmod +x tomcat
  4. 添加启动

    1
    2
    chkconfig --add tomcat
    chkconfig tomcat on
  5. 查看 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项。

  6. 可用如下命令启动/停止

    1
    2
    service tomcat start # 启动
    service tomcat stop # 停止
  7. 重启 OS,tomcat 服务会随 OS 一起启动。

关于非 root 用户启动 80 端口

如果将 tomcat 的端口改为 80 并以 utomcat 启动时,会得到下面的错误,因为非 root 用户不能访问 1024 以下的端口。

1
Caused by: java.net.SocketException: Permission denied

可以通过 iptables 来中转,具体操作这里不细讲。

通常的做法,是用nginx来配置多个域名,每个域名可设置访问不同的端口,比如多个tomcat启动的应用。参考:nginx 配置相关

tomcat 相关文章