Ubuntu 16.04 环境下实现 Tomcat 开机自启

2018-02-27 11:51:38来源:oschina作者:malajava人点击

分享
0、预备

( 请注意,本例基于 阿里云 云主机 完成所有,其它环境下可能略有不同)


0.1、修改主机名称

在 Ubuntu 的终端中,默认在用户名之后显示的即为本机主机名称(形式为: 用户名@主机名称 )。


该名称被保存在 /etc/hostname 文件中,因此通过 cat 等命令查看该文件也可以返回本机主机名称:


root@iZj6c3z6cxj72pewvf2dcyZ:~# cat /etc/hostname
iZj6c3z6cxj72pewvf2dcyZ

通过修改 /etc/hostname 文件的内容即可修改主机名称(使用vi或vim等命令直接编辑即可):


root@iZj6c3z6cxj72pewvf2dcyZ:~# vi /etc/hostname

修改后保存并退出vi编辑器,重新查看文件内容:


root@iZj6c3z6cxj72pewvf2dcyZ:~# cat /etc/hostname
malajava

重新启动 Ubuntu :


root@iZj6c3z6cxj72pewvf2dcyZ:~# reboot

启动完成后,打开终端,即可看到主机名称已经更换成功:


root@malajava:~#0.2、安装下载工具

Linux 平台下,有很多优秀的多线程下载工具,比如 wget 、axel 等,Ubuntu 一般自带 wget 。


这里,我们安装一个 Ubuntu 并没有内置的下载工具: axel


root@malajava:~# apt-get update
root@malajava:~# apt-get installaxel

安装完成后就可以使用了,后续下载 jdk 和 tomcat 都将使用该工具。


0.3、物以类聚

从个人工作十年多经历来看,将软件、代码等分类存放可以降低记忆成本,提高工作和学习效率。


将软件、代码等分类存放也一直是我向同事和学生建议的。因此,这里做出以下约定:

/opt/software 目录中存放程序安装包、压缩包,比如 apache-tomcat-9.0.5.tar.gz。
/opt/jdk 目录中存放的是解压后的 JDK (也就是JDK安装目录)
/opt/web 目录中存放与 WEB 服务器有关的程序(解压后可以运行的),比如 tomcat 、nginx 等。
/opt/www 目录中存放 WEB 应用 ( 俗称网站 )

本文后续内容中涉及的目录或文件路径,都将遵循以上约定。

1、下载并解压JDK

关于JDK版本的选择,建议从 Oracle 官网下载最新版本。 另外,因为 Oracle 官网上仅仅给出了 JDK 1.9 的 64 位版,所以本文中依然使用 JDK 1.8 。


Oracle 官方下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html


如果从 Oracle 官网下载失败,也可以从我的malajava.io 下载,因为租用的是海外服务器因此速度可能会比较慢,这里提供三个下载链接:


这是本文采用的:
64位Linux版: http://malajava.io/downloads/jdk-8u112-linux-x64.tar.gz
这是发文时最新版本:
32位Linux版: http://malajava.io/downloads/jdk-8u161-linux-i586.tar.gz
64位Linux版: http://malajava.io/downloads/jdk-8u161-linux-x64.tar.gz

如果你是在远程服务器上进行操作,建议从我的 malajava.io 下载。 如果你是在本地进行操作,可以从百度云盘下载(国内用户下载会比较快):


链接:https://pan.baidu.com/s/1kUSFchh 密码:ecjk

首先进入到 /opt/software 目录中:


root@malajava:~# cd /opt/software
root@malajava:/opt/software#

随后使用 axel 下载 JDK :


root@malajava:/opt/software# axel http://malajava.io/downloads/jdk-8u112-linux-x64.tar.gz

通常,Oracle会拒绝使用axel等工具下载(HTTP/1.0403Forbidden),因此这里选择从malajava.io下载。


下载完毕,可以通过 ls 查看该文件的相关信息:


root@malajava:/opt/software# ls -l jdk-8u112-linux-x64.tar.gz
-rw-r--r-- 1 root root 183212596 Feb 19 01:33 jdk-8u112-linux-x64.tar.gz

随后将jdk-8u112-linux-x64.tar.gz 解压到 /opt/jdk 目录中:


root@malajava:/opt/software# tar zxvf jdk-8u112-linux-x64.tar.gz -C /opt/jdk/

[ 这里的 tar 命令使用格式: tar zxvf 压缩文件 -C 目标路径 ]


[ 注意,当前操作是在 /opt/software 目录下进行的,jdk-8u112-linux-x64.tar.gz 就在该目录中 ]


成功解压后,进入到 /opt/jdk 目录中,使用 mv 命令将 jdk1.8.0_112 重命名为1.8.0_112 :


root@malajava:/opt/software# cd /opt/jdk
root@malajava:/opt/jdk# ls -l
total 4
drwxr-xr-x 8 uucp143 4096 Sep 232016 jdk1.8.0_112
root@malajava:/opt/jdk# mv jdk1.8.0_112 1.8.0_112
root@malajava:/opt/jdk# ls -l
total 4
drwxr-xr-x 8 uucp143 4096 Sep 232016 1.8.0_112

[ 这里使用mv 重命名的使用方式: mv 原来的文件名或目录名修改后的文件名或目录名]


[ 将jdk1.8.0_112 重命名为1.8.0_112 并不是必须的,只是沿用了我以前的工作习惯 ]


请注意,此时的 /opt/jdk/1.8.0_112 就是JDK的安装目录了,也是将来环境变量中JAVA_HOME变量的值。


以上操作完成后,接下来,我们修改/opt/jdk/1.8.0_112 目录的属主( owner )及分组( group ):


root@malajava:/opt/jdk# ls -l
total 4
drwxr-xr-x 8 uucp143 4096 Sep 232016 1.8.0_112
root@malajava:/opt/jdk# chown -R root:root 1.8.0_112
root@malajava:/opt/jdk# ls -l
total 4
drwxr-xr-x 8 root root 4096 Sep 232016 1.8.0_112
root@malajava:/opt/jdk# ls -l 1.8.0_112/
total 25920
drwxr-xr-x 2 root root 4096 Sep 232016 bin
-r--r--r-- 1 root root 3244 Sep 232016 COPYRIGHT
drwxr-xr-x 4 root root 4096 Sep 232016 db
drwxr-xr-x 3 root root 4096 Sep 232016 include
-rwxr-xr-x 1 root root5094021 Sep 232016 javafx-src.zip
drwxr-xr-x 5 root root 4096 Sep 232016 jre
drwxr-xr-x 5 root root 4096 Sep 232016 lib
-r--r--r-- 1 root root40 Sep 232016 LICENSE
drwxr-xr-x 4 root root 4096 Sep 232016 man
-r--r--r-- 1 root root159 Sep 232016 README.html
-rw-r--r-- 1 root root526 Sep 232016 release
-rw-r--r-- 1 root root 21112816 Sep 232016 src.zip
-rwxr-xr-x 1 root root 110114 Sep 232016 THIRDPARTYLICENSEREADME-JAVAFX.txt
-r--r--r-- 1 root root 177094 Sep 232016 THIRDPARTYLICENSEREADME.txt

[ 这里的 chown 命令使用格式: chown -R 属主:分组 目录名]


[ 选项-R表示递归(recursion),即将被修改目录中的文件及子目录、子目录中的文件及子目录 ... 都做修改 ]


接下来,建议修改/opt/jdk/1.8.0_112 目录以及其各级子目录中每个文件的权限:


root@malajava:/opt/jdk# chmod -R 755 1.8.0_112
root@malajava:/opt/jdk# ls -l
total 4
drwxr-xr-x 8 root root 4096 Sep 232016 1.8.0_112
root@malajava:/opt/jdk# ls -l 1.8.0_112/
total 25920
drwxr-xr-x 2 root root 4096 Sep 232016 bin
-rwxr-xr-x 1 root root 3244 Sep 232016 COPYRIGHT
drwxr-xr-x 4 root root 4096 Sep 232016 db
drwxr-xr-x 3 root root 4096 Sep 232016 include
-rwxr-xr-x 1 root root5094021 Sep 232016 javafx-src.zip
drwxr-xr-x 5 root root 4096 Sep 232016 jre
drwxr-xr-x 5 root root 4096 Sep 232016 lib
-rwxr-xr-x 1 root root40 Sep 232016 LICENSE
drwxr-xr-x 4 root root 4096 Sep 232016 man
-rwxr-xr-x 1 root root159 Sep 232016 README.html
-rwxr-xr-x 1 root root526 Sep 232016 release
-rwxr-xr-x 1 root root 21112816 Sep 232016 src.zip
-rwxr-xr-x 1 root root 110114 Sep 232016 THIRDPARTYLICENSEREADME-JAVAFX.txt
-rwxr-xr-x 1 root root 177094 Sep 232016 THIRDPARTYLICENSEREADME.txt

[ 这里的 chmod命令使用格式: chmod -R 权限 目录名]


[ 选项-R表示递归(recursion),即将被修改目录中的文件及子目录、子目录中的文件及子目录 ... 都做修改 ]


其中,755 表示 rwx r-x r-x 权限 ( r=4 , w=2 , x=1 ),为了偷懒,将该目录中所有文件的权限都修改了。

2、下载并解压Tomcat

这么些年,好多国外的技术站点都被"墙"了,不过还好,国内尚能访问 apache 官网。 正所谓"大道五十,天衍四九,人遁其一" (《周易.系辞上传》) ,我们尚有一线生机!


好了,言归正传,从 apache 官网下载最新版本tomcat,首先进入 tomcat 官网:tomcat.apache.org 然后在左侧的 Download 标题下点击相应版本的 tomcat ,比如 Tomcat 9,进入 Tomcat 9 下载页面。 在新打开的页面中找到类似下图所示的区域:



随后在 Binary Distributions 下放找到 Core 下的 tar.gz ,点击鼠标右键,选择 "复制链接地址" 。


之后在 Ubuntu 终端中进入到 /opt/software 目录 ( 之前约定过的 ):


root@malajava:~# cd /opt/software
root@malajava:/opt/software#

接下来,在 终端中先输入 axel ,再在之后 粘贴 刚刚复制的 链接地址,即可下载:


root@malajava:/opt/software# axel http://mirrors.shu.edu.cn/apache/tomcat/tomcat-9/v9.0.5/bin/apache-tomcat-9.0.5.tar.gz

[ 注意,axel 命令 和 链接地址 之间是有空格的 !]


下载完成后,将刚下载的 .tar.gz 文件解压到 /opt/web 目录下 ( 之前约定过的 ):


root@malajava:/opt/software# tar zxvf apache-tomcat-9.0.5.tar.gz -C /opt/web/

进入到 /opt/web 目录并将 apache-tomcat-9.0.5 改名为 apache-tomcat :


root@malajava:/opt/software# cd /opt/web/
root@malajava:/opt/web# ls -l
total 4
drwxr-xr-x 9 root root 4096 Feb 19 01:39 apache-tomcat-9.0.5
root@malajava:/opt/web# mv apache-tomcat-9.0.5 apache-tomcat
root@malajava:/opt/web# ls -l
total 4
drwxr-xr-x 9 root root 4096 Feb 19 01:39 apache-tomcat
root@malajava:/opt/web# ls -l apache-tomcat
total 112
drwxr-x--- 2 root root4096 Feb 20 23:47 bin
drwx------ 2 root root4096 Feb7 05:44 conf
drwxr-x--- 2 root root4096 Feb 20 23:47 lib
-rw-r----- 1 root root 57092 Feb7 05:44 LICENSE
drwxr-x--- 2 root root4096 Feb7 05:42 logs
-rw-r----- 1 root root1804 Feb7 05:44 NOTICE
-rw-r----- 1 root root6851 Feb7 05:44 RELEASE-NOTES
-rw-r----- 1 root root 16246 Feb7 05:44 RUNNING.txt
drwxr-x--- 2 root root4096 Feb 20 23:47 temp
drwxr-x--- 7 root root4096 Feb7 05:42 webapps
drwxr-x--- 2 root root4096 Feb7 05:42 work

[ 这里将 apache-tomcat-9.0.5 改名为 apache-tomcat 依然不是必须的,只是沿用了我以前的工作习惯]


如果 apache-tomcat 目录及其内部文件和子目录的属主不是 root ,分组不是 root ,使用以下命令修改:


root@malajava:/opt/web# chown -R root:root apache-tomcat

接下来,修改 /opt/web/apache-tomcat 目录以及其各级子目录中每个文件的权限:


root@malajava:/opt/web# chmod -R 755 apache-tomcat
root@malajava:/opt/web# ls -l
total 4
drwxr-xr-x 9 root root 4096 Feb 20 23:47 apache-tomcat
root@malajava:/opt/web# ls -l apache-tomcat
total 112
drwxr-xr-x 2 root root4096 Feb 20 23:47 bin
drwxr-xr-x 2 root root4096 Feb7 05:44 conf
drwxr-xr-x 2 root root4096 Feb 20 23:47 lib
-rwxr-xr-x 1 root root 57092 Feb7 05:44 LICENSE
drwxr-xr-x 2 root root4096 Feb7 05:42 logs
-rwxr-xr-x 1 root root1804 Feb7 05:44 NOTICE
-rwxr-xr-x 1 root root6851 Feb7 05:44 RELEASE-NOTES
-rwxr-xr-x 1 root root 16246 Feb7 05:44 RUNNING.txt
drwxr-xr-x 2 root root4096 Feb 20 23:47 temp
drwxr-xr-x 7 root root4096 Feb7 05:42 webapps
drwxr-xr-x 2 root root4096 Feb7 05:42 work 3、配置环境变量

配置环境变量之前,回顾一下之前 JDK 及 Tomcat 的存放路径:


JDK安装目录为: /opt/jdk/1.8.0_112 ,该目录中内容如下:


root@malajava:~# ls -l /opt/jdk/1.8.0_112
total 25920
drwxr-xr-x 2 root root 4096 Sep 232016 bin
-r--r--r-- 1 root root 3244 Sep 232016 COPYRIGHT
drwxr-xr-x 4 root root 4096 Sep 232016 db
drwxr-xr-x 3 root root 4096 Sep 232016 include
-rwxr-xr-x 1 root root5094021 Sep 232016 javafx-src.zip
drwxr-xr-x 5 root root 4096 Sep 232016 jre
drwxr-xr-x 5 root root 4096 Sep 232016 lib
-r--r--r-- 1 root root40 Sep 232016 LICENSE
drwxr-xr-x 4 root root 4096 Sep 232016 man
-r--r--r-- 1 root root159 Sep 232016 README.html
-rw-r--r-- 1 root root526 Sep 232016 release
-rw-r--r-- 1 root root 21112816 Sep 232016 src.zip
-rwxr-xr-x 1 root root 110114 Sep 232016 THIRDPARTYLICENSEREADME-JAVAFX.txt
-r--r--r-- 1 root root 177094 Sep 232016 THIRDPARTYLICENSEREADME.txt

Tomcat 安装目录为: /opt/web/apache-tomcat ,该目录中内容如下:


root@malajava:~# ls -l /opt/web/apache-tomcat
total 112
drwxr-x--- 2 root root4096 Feb 19 01:39 bin
drwx------ 3 root root4096 Feb 19 02:01 conf
drwxr-x--- 2 root root4096 Feb 19 01:39 lib
-rw-r----- 1 root root 57092 Feb7 05:44 LICENSE
drwxr-x--- 2 root root4096 Feb 20 13:37 logs
-rw-r----- 1 root root1804 Feb7 05:44 NOTICE
-rw-r----- 1 root root6851 Feb7 05:44 RELEASE-NOTES
-rw-r----- 1 root root 16246 Feb7 05:44 RUNNING.txt
drwxr-x--- 2 root root4096 Feb 19 01:39 temp
drwxr-x--- 2 root root4096 Feb 19 01:46 webapps
drwxr-x--- 3 root root4096 Feb 19 01:57 work

使用 vi 编辑器修改/etc/profile ( 确保拥有 root 权限的前提下 ):


root@malajava:~# vi /etc/profile

在 /etc/profile 末尾追加以下内容:


export JAVA_HOME=/opt/jdk/1.8.0_112
export CATALINA_HOME=/opt/web/apache-tomcat
export PATH=.:$JAVA_HOME/bin:$CATALINA_HOME/bin:$PATH
export CLASSPATH=.

[ 这里需要强调的是 CLASSPATH ,如非特殊需要,它的取值只需要一个半角圆点 ,这里采用最简配置 ]


[ 作为一个初学者或者并无特殊需要的前提下,并没有必要为 CLASSPATH 取值追加其它内容 ]


[ 若写作 CLASSPATH=.:$JAVA_HOME/lib/tools.jar;$JAVA_HOME/lib/dt.jar纯属画蛇添足]


注意:

Linux 环境下,引用某个已经存在的环境变量使用 "$变量名" 的形式,比如 $JAVA_HOME
环境变量的取值可能包含多个部分,在Linux环境下,不同部分之间使用 : 分隔 ( 注意是半角冒号 )

配置环境变量之后,需要先让环境变量生效:

注销用户或重启系统可以让全局范围内都生效
使用 source 命令,让环境变量仅仅在当前终端中生效

这里,暂不重启 Ubuntu ( 因为是远程登录嘛,重启还需要重新链接 ),而是使用 source 命令:


root@malajava:~# source /etc/profile
root@malajava:~#

随后即可在终端中通过执行 javac 和 java 命令的方式检验是否配置成功:


root@malajava:~# javac -version
javac 1.8.0_112
root@malajava:~# java -version
java version "1.8.0_112"
Java(TM) SE Runtime Environment (build 1.8.0_112-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.112-b15, mixed mode)

当看到以上信息时,即表示环境变量中与Java有关的配置是正确的。

4、验证 Tomcat 配置是否正确

在终端中输入以下命令(注意在单词run之前有个半角空格):


root@malajava:~# catalina.sh run

如果按下回车键后看到的是以下提示:


root@malajava:~# catalina.sh run
catalina.sh: command not found

则表示环境变量中的CATALINA_HOME 对应的路径是不正确的,请仔细检查并更改正确。


( 只需要让 CATALINA_HOME= 之后的路径跟Tomcat 的解压后的路径保持一致即可 )


当看到以下信息时,即表示CATALINA_HOME 配置成功,并且 Tomcat 也正常启动了。


root@malajava:~# catalina.sh run
Using CATALINA_BASE: /opt/web/apache-tomcat
Using CATALINA_HOME: /opt/web/apache-tomcat
Using CATALINA_TMPDIR: /opt/web/apache-tomcat/temp
Using JRE_HOME: /opt/jdk/1.8.0_112
Using CLASSPATH:/opt/web/apache-tomcat/bin/bootstrap.jar:/opt/web/apache-tomcat/bin/tomcat-juli.jar
........................此处省略一大坨日志信息(这个你们可以懂的)........................
19-Feb-2018 03:42:17.045 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-80"]
19-Feb-2018 03:42:17.147 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"]
19-Feb-2018 03:42:17.161 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 663 ms

此时,可以通过 浏览器 来访问 Tomcat 。


如果是本机进行操作,直接输入 http://localhost:8080 即可访问 Tomcat 首页。


如果是在远程主机上操作,可以输入 http://远程主机IP地址:8080 来访问 Tomcat 首页。


终止当前终端中的程序,可以使用 Ctrl + C 组合键来实现。

5、干掉意外

正常情况下,启动 Tomcat 是比较顺利的,并且耗时较少。


但是,从本人在 Linux 下搭建 Tomcat 运行环境的实际情况以及网络上大家的提问来看,


很多小伙伴会遭遇启动 Tomcat 时巨慢,甚至被卡住(此时使用浏览器是无法访问 Tomcat 的)。


[原因]


Tomcat 的 Session ID 是通过 SHA1PRNG 算法计算得到的,SHA1 算法需要一个密钥,这个密钥在 Tomcat 启动的时候随机生成一个,在 Linux 系统下生成该密钥时使用了 Linux 随机函数生成器/dev/random 。


而/dev/random会根据 噪音 产生随机数,如果噪音不够它就会阻塞。Linux 是通过 I/O,键盘终端、内存使用量、CPU 利用率等方式来收集噪音的,如果噪音不够生成随机数的时候就会被阻塞。


[解决方案]


解决上述问题有两个方案: 一个使用伪随机函数生成器,另外一个加大/dev/random的熵池。


这里采用第一种方案解决,关于 "/dev/random的熵池" 请自行研究。


第一种解决方案可以有两种实现方式:

通过修改 Tomcat 启动文件 -Djava.security.egd=file:/dev/urandom
通过修改 JRE 中的 java.security 文件 securerandom.source=file:/dev/urandom

本文中使用了修改 java.security 的方式(据博主的学生反映该方式是最简单粗暴的)。


[解决问题]


在终端中输入并回车,进入 JDK 主目录中:


root@malajava:~# cd $JAVA_HOME/jre/lib/security
root@malajava:/opt/jdk/1.8.0_112/jre/lib/security#

随后通过 ls 查看该目录中的文件清单:


root@malajava:/opt/jdk/1.8.0_112/jre/lib/security# ls -l
total 164
-rw-r--r-- 1 root root 4054 Sep 232016 blacklist
-rw-r--r-- 1 root root 1273 Sep 232016 blacklisted.certs
-rw-r--r-- 1 root root 112860 Sep 232016 cacerts
-rw-r--r-- 1 root root 2466 Sep 232016 java.policy
-rw-r--r-- 1 root root27398 Feb 19 03:01 java.security
-rw-r--r-- 1 root root 98 Sep 232016 javaws.policy
-rw-r--r-- 1 root root 3527 Sep 232016 local_policy.jar
-rw-r--r-- 1 root root0 Sep 232016 trusted.libraries
-rw-r--r-- 1 root root 3026 Sep 232016 US_export_policy.jar

通过 vi 修改该目录下的 java.security 文件:


root@malajava:/opt/jdk/1.8.0_112/jre/lib/security# vi java.security

默认情况下,大概在该文件的 115 行 前后,即可找到以下内容:


securerandom.source=file:/dev/random

将以上内容注释掉,并改为以下内容


securerandom.source=file:/dev/urandom

修改后的文件如下所示:


105 # The entropy gathering device can also be specified with the System
106 # property "java.security.egd". For example:
107 #
108 # % java -Djava.security.egd=file:/dev/random MainClass
109 #
110 # Specifying this System property will override the
111 # "securerandom.source" Security property.
112 #
113 # In addition, if "file:/dev/random" or "file:/dev/urandom" is
114 # specified, the "NativePRNG" implementation will be more preferred than
115 # SHA1PRNG in the Sun provider.
116 #
117 # securerandom.source=file:/dev/random
118 securerandom.source=file:/dev/urandom

( 注意前面的数值是vi编辑器下的行号,不需要复制到你的文件中 )


经过以上修改后,重启 Ubuntu 即可解决前述问题。


( 2016年遇到过Ubuntu12.04环境下,因为APR导致的卡死 Tomcat 现象,在Ubuntu16.04中暂未遇到 )


( 如果有遇到的小伙伴,请私信我 )

6、实现开机自启

默认情况下,Tomcat 并不会随 Ubuntu 启动而开启。


本文中将通过设置 rc.local 脚本的方式来实现开机启动命令/脚本。


6.1、熟悉 rc.local 脚本的格式

rc.local 脚本是一个 Ubuntu 开机后会自动执行的脚本,我们可以在该脚本内添加命令行指令。


该脚本位于/etc/目录下,需要 root 权限才能创建和修改,其基本格式如下:


#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.exit 0

注意: 一定要将命令添加在 exit 0 之前。其中可以直接写命令或者执行shell脚本。


另外,通常将随开机启动的脚本放在 /etc/init.d 目录中。通过 cat 等命令可以查看到在 /etc/rc.local 中并没有具体的脚本代码(正如上面的基本格式中所包含的内容),而在 /etc/init.d/rc.local 中包含大量的脚本代码(这里不列出具体代码)。


因此,我们所创建的用来启动 Tomcat 的脚本也将放入到 /etc/init.d 目录中。


6.2、创建 tomcat 启动脚本

在终端中进入到 /etc/init.d/ 目录中,并使用 touch 命令创建名称为 tomcat 的脚本文件


root@malajava:~# cd /etc/init.d
root@malajava:/etc/init.d# touch tomcat
root@malajava:/etc/init.d# ls -l tomcat
-rw-r--r-- 1 root root 0 Feb 19 02:09 tomcat

为新创建的 tomcat 文件添加执行权限:


root@malajava:/etc/init.d# chmod a+x tomcat
root@malajava:/etc/init.d# ls -l tomcat
-rwxr-xr-x 1 root root 0 Feb 19 02:09 tomcat

使用 vi 命令在 tomcat 文件中添加以下内容:


#!/bin/sh
#tomcat auto-start
#
# description: Auto-starts tomcat
# processname: tomcat
# pidfile: /var/run/tomcat.pid
export JAVA_HOME=/opt/jdk/1.8.0_112export CATALINA_HOME=/opt/web/apache-tomcatcase $1 in
start)
sh $CATALINA_HOME/bin/startup.sh
;;
stop)
sh $CATALINA_HOME/bin/shutdown.sh
;;
restart)
sh $CATALINA_HOME/bin/shutdown.sh
sh $CATALINA_HOME/bin/startup.sh
;;
*)
echo 'Usage:tomcat start|stop|restart'
;;
esacexit 0

其中:

JAVA_HOME 是 JDK 的主目录,与之前下载JDK、解压、配置环境变量时一致
CATALINA_HOME 是 tomcat 的主目录,与之前下载Tomcat、解压、配置环境变量时一致

添加完成后,保存即可进入下一步操作。


6.3、通过 update-rc.d 增加开机启动服务

(1)、update-rc.d 命令


在 root 权限下使用 update-rc.d 命令可以增加、设置、移除开机自启服务,其常用形式如下:


1、update-rc.d [-n] [-f] name remove
2、update-rc.d [-n] name defaults
3、update-rc.d [-n] name disable|enable [ S|2|3|4|5 ]

有关于 update-rc.id 命令,请自行从网络上查询,这里不做详细介绍。


(2)、将新创建 6.2 中创建的 tomcat 脚本添加到开机启动


root@malajava:/etc/init.d# update-rc.dtomcatdefaults

这步可能会有类似以下内容禁告: insserv: warning: script 'K01tomcat' missing LSB tags and overrides insserv: warning: script 'tomcat' missing LSB tags and overrides 忽略它即可,这并不影响后续操作。( 解决 insserv:warning 的方法请参看这篇博文 )


如果要将指定服务从开启自动服务中移除,可以使用update-rc.d tomcat remove 来实现。


(3)、查看服务状态


使用 service 命令可以管理服务,其使用形式如下:


查看状态: service name status
启动服务: service name start
关闭服务: service name stop
重启服务: service name restart

其中 name 是指服务名称,比如查看刚刚添加的 tomcat 服务的状态,其形式如下:


root@malajava:~# service tomcat status
● tomcat.service - SYSV: Auto-starts tomcat
Loaded: loaded (/etc/init.d/tomcat; bad; vendor preset: enabled)
Active: failed (Result: timeout) since Mon 2018-02-19 05:01:12 CST; 1 day 7h ago
Docs: man:systemd-sysv-generator(8)
CGroup: /system.slice/tomcat.service
└─605 /opt/jdk/1.8.0_112/bin/java -Djava.util.logging.config.file=/opt/web/apache-tomcat/conf/logging.properties -Djava.util.loggi
Feb 19 04:56:11 malajava systemd[1]: Starting SYSV: Auto-starts tomcat...
Feb 19 04:56:11 malajava tomcat[582]: Tomcat started.
Feb 19 04:56:11 malajava systemd[1]: tomcat.service: PID file /var/run/tomcat.pid not readable (yet?) after start: No such file or directory
Feb 19 05:01:12 malajava systemd[1]: tomcat.service: Start operation timed out. Terminating.
Feb 19 05:01:12 malajava systemd[1]: Failed to start SYSV: Auto-starts tomcat.
Feb 19 05:01:12 malajava systemd[1]: tomcat.service: Unit entered failed state.
Feb 19 05:01:12 malajava systemd[1]: tomcat.service: Failed with result 'timeout'.
lines 1-14/14 (END)

( 注意,此时如果要回到 命令行状态,可以按 Ctrl + c 组合键 )


如果要查看全部服务列表,可以使用:


service --status-all 7、重启 Ubuntu ,测试 Tomcat 是否随开机自启动

在 root 权限下,输入 reboot 重新启动 Ubuntu :


root@malajava:~# reboot

重新启动 Ubuntu 后,应该可以查看到 tomcat 对应的进程:


root@malajava:~# ps -ef | grep tomcat
root719 13 13:37 ? 00:00:02 /opt/jdk/1.8.0_112/bin/java -Djava.util.logging.config.file=/opt/web/apache-tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dignore.endorsed.dirs= -classpath /opt/web/apache-tomcat/bin/bootstrap.jar:/opt/web/apache-tomcat/bin/tomcat-juli.jar -Dcatalina.base=/opt/web/apache-tomcat -Dcatalina.home=/opt/web/apache-tomcat -Djava.io.tmpdir=/opt/web/apache-tomcat/temp org.apache.catalina.startup.Bootstrap start
root106410500 13:39 pts/000:00:00 grep --color=auto tomcat

列表中的第一个就是随系统自动启动而自动启动的 tomcat 进程。


这里的 ps 用于列出当前系统中正在运行的进程,grep 起过滤作用。


ps -ef | grep tomcat 的含义就是找到当前系统正在运行的所有进程并筛选其中包含 tomcat 的那些进程。


另外,当前执行的命令"ps -ef | grep tomcat"也包含"tomcat",所以也在列表中列出了(列表中的第二个)。


同时,我们也可以通过service tomcat status 来查看 tomcat 服务的状态。


最后,我们可以通过浏览器来访问 tomcat 服务。


至此,在 Ubuntu 16.04 环境下实现 Tomcat 开机自启动设置完成。

有鉴于时间和精力有限,本文中难免错误和疏漏,不当之处,敬请指正。

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台