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 install axel
安装完成后就可以使用了,后续下载 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.0 403 Forbidden),因此这里选择从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 uucp 143 4096 Sep 23 2016 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 uucp 143 4096 Sep 23 2016 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 uucp 143 4096 Sep 23 2016 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 23 2016 1.8.0_112
root@malajava:/opt/jdk# ls -l 1.8.0_112/
total 25920
drwxr-xr-x 2 root root 4096 Sep 23 2016 bin
-r--r--r-- 1 root root 3244 Sep 23 2016 COPYRIGHT
drwxr-xr-x 4 root root 4096 Sep 23 2016 db
drwxr-xr-x 3 root root 4096 Sep 23 2016 include
-rwxr-xr-x 1 root root 5094021 Sep 23 2016 javafx-src.zip
drwxr-xr-x 5 root root 4096 Sep 23 2016 jre
drwxr-xr-x 5 root root 4096 Sep 23 2016 lib
-r--r--r-- 1 root root 40 Sep 23 2016 LICENSE
drwxr-xr-x 4 root root 4096 Sep 23 2016 man
-r--r--r-- 1 root root 159 Sep 23 2016 README.html
-rw-r--r-- 1 root root 526 Sep 23 2016 release
-rw-r--r-- 1 root root 21112816 Sep 23 2016 src.zip
-rwxr-xr-x 1 root root 110114 Sep 23 2016 THIRDPARTYLICENSEREADME-JAVAFX.txt
-r--r--r-- 1 root root 177094 Sep 23 2016 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 23 2016 1.8.0_112
root@malajava:/opt/jdk# ls -l 1.8.0_112/
total 25920
drwxr-xr-x 2 root root 4096 Sep 23 2016 bin
-rwxr-xr-x 1 root root 3244 Sep 23 2016 COPYRIGHT
drwxr-xr-x 4 root root 4096 Sep 23 2016 db
drwxr-xr-x 3 root root 4096 Sep 23 2016 include
-rwxr-xr-x 1 root root 5094021 Sep 23 2016 javafx-src.zip
drwxr-xr-x 5 root root 4096 Sep 23 2016 jre
drwxr-xr-x 5 root root 4096 Sep 23 2016 lib
-rwxr-xr-x 1 root root 40 Sep 23 2016 LICENSE
drwxr-xr-x 4 root root 4096 Sep 23 2016 man
-rwxr-xr-x 1 root root 159 Sep 23 2016 README.html
-rwxr-xr-x 1 root root 526 Sep 23 2016 release
-rwxr-xr-x 1 root root 21112816 Sep 23 2016 src.zip
-rwxr-xr-x 1 root root 110114 Sep 23 2016 THIRDPARTYLICENSEREADME-JAVAFX.txt
-rwxr-xr-x 1 root root 177094 Sep 23 2016 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 root 4096 Feb 20 23:47 bin
drwx------ 2 root root 4096 Feb 7 05:44 conf
drwxr-x--- 2 root root 4096 Feb 20 23:47 lib
-rw-r----- 1 root root 57092 Feb 7 05:44 LICENSE
drwxr-x--- 2 root root 4096 Feb 7 05:42 logs
-rw-r----- 1 root root 1804 Feb 7 05:44 NOTICE
-rw-r----- 1 root root 6851 Feb 7 05:44 RELEASE-NOTES
-rw-r----- 1 root root 16246 Feb 7 05:44 RUNNING.txt
drwxr-x--- 2 root root 4096 Feb 20 23:47 temp
drwxr-x--- 7 root root 4096 Feb 7 05:42 webapps
drwxr-x--- 2 root root 4096 Feb 7 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 root 4096 Feb 20 23:47 bin
drwxr-xr-x 2 root root 4096 Feb 7 05:44 conf
drwxr-xr-x 2 root root 4096 Feb 20 23:47 lib
-rwxr-xr-x 1 root root 57092 Feb 7 05:44 LICENSE
drwxr-xr-x 2 root root 4096 Feb 7 05:42 logs
-rwxr-xr-x 1 root root 1804 Feb 7 05:44 NOTICE
-rwxr-xr-x 1 root root 6851 Feb 7 05:44 RELEASE-NOTES
-rwxr-xr-x 1 root root 16246 Feb 7 05:44 RUNNING.txt
drwxr-xr-x 2 root root 4096 Feb 20 23:47 temp
drwxr-xr-x 7 root root 4096 Feb 7 05:42 webapps
drwxr-xr-x 2 root root 4096 Feb 7 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 23 2016 bin
-r--r--r-- 1 root root 3244 Sep 23 2016 COPYRIGHT
drwxr-xr-x 4 root root 4096 Sep 23 2016 db
drwxr-xr-x 3 root root 4096 Sep 23 2016 include
-rwxr-xr-x 1 root root 5094021 Sep 23 2016 javafx-src.zip
drwxr-xr-x 5 root root 4096 Sep 23 2016 jre
drwxr-xr-x 5 root root 4096 Sep 23 2016 lib
-r--r--r-- 1 root root 40 Sep 23 2016 LICENSE
drwxr-xr-x 4 root root 4096 Sep 23 2016 man
-r--r--r-- 1 root root 159 Sep 23 2016 README.html
-rw-r--r-- 1 root root 526 Sep 23 2016 release
-rw-r--r-- 1 root root 21112816 Sep 23 2016 src.zip
-rwxr-xr-x 1 root root 110114 Sep 23 2016 THIRDPARTYLICENSEREADME-JAVAFX.txt
-r--r--r-- 1 root root 177094 Sep 23 2016 THIRDPARTYLICENSEREADME.txt
Tomcat 安装目录为: /opt/web/apache-tomcat ,该目录中内容如下:
root@malajava:~# ls -l /opt/web/apache-tomcat
total 112
drwxr-x--- 2 root root 4096 Feb 19 01:39 bin
drwx------ 3 root root 4096 Feb 19 02:01 conf
drwxr-x--- 2 root root 4096 Feb 19 01:39 lib
-rw-r----- 1 root root 57092 Feb 7 05:44 LICENSE
drwxr-x--- 2 root root 4096 Feb 20 13:37 logs
-rw-r----- 1 root root 1804 Feb 7 05:44 NOTICE
-rw-r----- 1 root root 6851 Feb 7 05:44 RELEASE-NOTES
-rw-r----- 1 root root 16246 Feb 7 05:44 RUNNING.txt
drwxr-x--- 2 root root 4096 Feb 19 01:39 temp
drwxr-x--- 2 root root 4096 Feb 19 01:46 webapps
drwxr-x--- 3 root root 4096 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 23 2016 blacklist
-rw-r--r-- 1 root root 1273 Sep 23 2016 blacklisted.certs
-rw-r--r-- 1 root root 112860 Sep 23 2016 cacerts
-rw-r--r-- 1 root root 2466 Sep 23 2016 java.policy
-rw-r--r-- 1 root root 27398 Feb 19 03:01 java.security
-rw-r--r-- 1 root root 98 Sep 23 2016 javaws.policy
-rw-r--r-- 1 root root 3527 Sep 23 2016 local_policy.jar
-rw-r--r-- 1 root root 0 Sep 23 2016 trusted.libraries
-rw-r--r-- 1 root root 3026 Sep 23 2016 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_112
export CATALINA_HOME=/opt/web/apache-tomcat
case $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'
;;
esac
exit 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.d tomcat defaults
这步可能会有类似以下内容禁告:
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
root 719 1 3 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
root 1064 1050 0 13:39 pts/0 00: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 开机自启动设置完成。
有鉴于时间和精力有限,本文中难免错误和疏漏,不当之处,敬请指正。