热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux笔记#04#InstallingTomcat8onDebian

失败一※失败二 ※失败三 ※完 1-确认机型:root@iZwz:~#lsb_release-aLSBVersion:core-2.0-amd64:core-2.0-noarch:

失败一 ※ 失败二  ※ 失败三 ※ 完

 

1- 确认机型:

root@iZwz:~# lsb_release -a
LSB Version:    core-2.0-amd64:core-2.0-noarch:core-3.0-amd64:core-3.0-noarch:core-3.1-amd64:core-3.1-noarch:core-3.2-amd64:core-3.2-noarch:core-4.0-amd64:core-4.0-noarch:core-4.1-amd64:core-4.1-noarch:security-4.0-amd64:security-4.0-noarch:security-4.1-amd64:security-4.1-noarch
Distributor ID:    Debian
Description:    Debian GNU/Linux 8.8 (jessie)
Release:    8.8
Codename:    jessie

2- 确保安装了 tomcat 运行所需要的 JRE :

java -version

3- 确保安装了 wget  和 unzip (辅助后续安装):

apt-get update && apt-get upgrade

apt-get install unzip wget

4- 创建一个单独的系统用户来跑 tomcat (网站建议),通过以下命令:

useradd -r tomcat --shell /bin/false
shell进程是执行其它进程的进程,但在执行一个命令时,shell进程会指示内核把指定的程序作为另一个进程分开执行,并将输出写到终端。
通过命令选项,我们可以修改命令执行的行为。命令行选项可以分为短命令行选项和长命令行选项两种。短命令行选项是由字母组成,长命令行选项是由单词组成。短命令行选项在选项前使用单横杠“-”,长命令行选项前使用双横杠“--”。如果选项后面需要输入选项的参数,短命令行选项和参数之间使用空格分隔,而长命令行选项使用等号“=”连接选项和参数。
通过在命令后面添加选项“--help”、“-h”或“-?”,我们可以获得一个命令的帮助信息。 --- by 洪军不怕远征难

What does “--” (double-dash) mean? (also known as “bare double dash”) <-- 不相关的笔记 :p

5- 从网站下载 tomcat 到 /opt 目录下,和 windows 其实是一样的。

Linux 笔记 #04# Installing Tomcat 8 on Debian

wget https://archive.apache.org/dist/tomcat/tomcat-8/v8.0.41/src/apache-tomcat-8.0.41-src.tar.gz -P /opt

 6- 下载好后解压缩(到这里感觉都装好了 = =)

cd /opt
tar -zxf apache-tomcat-8.0.41.tar.gz

 7- 创建汤姆猫的“符号链接”(?)并设置适当的所有权

ln -s /opt/apache-tomcat-8.0.41 /opt/tomcat-latest
chown -hR tomcat: /opt/tomcat-latest /opt/apache-tomcat-*

弄好后在 /opt 目录下是这个情况:

Linux 笔记 #04# Installing Tomcat 8 on Debian

 8- 创建一个系统初始化文件以便  start/restart/stop 汤姆猫:

nano /etc/systemd/system/tomcat.service

copy 下面的内容:

[Unit]
Description=Tomcat8
After=network.target

[Service]
Type=forking
User=tomcat
Group=tomcat

Environment=CATALINA_PID=/opt/tomcat-latest/tomcat8.pid
Environment=TOMCAT_JAVA_HOME=/usr/bin/java
Environment=CATALINA_HOME=/opt/tomcat-latest
Environment=CATALINA_BASE=/opt/tomcat-latest
Environment=CATALINA_OPTS=
Environment="JAVA_OPTS=-Dfile.encoding=UTF-8 -Dnet.sf.ehcache.skipUpdateCheck=true -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+UseParNewGC -XX:MaxPermSize=128m -Xms512m -Xmx512m"

ExecStart=/opt/tomcat-latest/bin/startup.sh
ExecStop=/bin/kill -15 $MAINPID

[Install]
WantedBy=multi-user.target
linux下 nano 在编辑状态下退出请按Ctrl+X,会有两种情形: 如果文件未修改,直接退出; 如果修改了文件,下面会询问是否需要保存修改。输入Y确认保存,输入N不保存,按Ctrl+C取消返回。如果输入了Y,下一步会提示输入想要保存的文件名。如果不需要修改文件名直接回车就行;若想要保存成别的名字(也就是另存为)则 ... (来自百度知道 happygrid)

 9- 最后几个命令

systemctl daemon-reload # 重载所有修改过的配置文件
systemctl restart tomcat.service # 文章里是直接 restart tomcat 但是我用了报错。。后来发现其实效果是一样的
systemctl enable tomcat
如果配置文件里面设置了开机启动,systemctl enable命令相当于激活开机启动。
与之对应的,systemctl disable命令用于在两个目录之间,撤销符号链接关系,相当于撤销开机启动。
-- 阮一峰

 

------------------------------------------------------------------------------------------------------------------------------------------------------

 出点差错。。抛点 bug 才比较有真实感。

按流程走下来,在 restart 和 enable 时都抛出了下面的提示(我的主机是这样 --- 囧):

Job for tomcat.service failed. See 'systemctl status tomcat.service' and 'journalctl -xn' for details.

 tomcat 8 will not start after initial install

Linux 笔记 #04# Installing Tomcat 8 on Debian

按照上面解决方案做抛出这个错误信息 Error message 'sudo: unable to resolve host ' 我直接到阿里云控制台改HostName就解决了。

成功输入上面的命令 restart 还是没用,于是换教程 2 。

------------------------------------------------------------------------------------------------------------------------------------------------------

 

 先决条件:

root@xkfx:/usr/lib/jvm/java-8-oracle# ls -lsh
total 26M
4.0K drwxr-xr-x 2 root root 4.0K Jan 14 00:53 bin
4.0K -r--r--r-- 1 root root 3.2K Jan 14 00:53 COPYRIGHT
4.0K drwxr-xr-x 4 root root 4.0K Jan 14 00:53 db
4.0K drwxr-xr-x 3 root root 4.0K Jan 14 00:53 include
5.0M -rwxr-xr-x 1 root root 5.0M Jan 14 00:53 javafx-src.zip
4.0K drwxr-xr-x 5 root root 4.0K Jan 14 00:53 jre
4.0K drwxr-xr-x 5 root root 4.0K Jan 14 00:53 lib
4.0K -r--r--r-- 1 root root   40 Jan 14 00:53 LICENSE
4.0K drwxr-xr-x 4 root root 4.0K Jan 14 00:53 man
4.0K -r--r--r-- 1 root root  159 Jan 14 00:53 README.html
4.0K -rw-r--r-- 1 root root  526 Jan 14 00:53 release
 21M -rw-r--r-- 1 root root  21M Jan 14 00:53 src.zip
 64K -rwxr-xr-x 1 root root  63K Jan 14 00:53 THIRDPARTYLICENSEREADME-JAVAFX.txt
144K -r--r--r-- 1 root root 142K Jan 14 00:53 THIRDPARTYLICENSEREADME.txt
root@xkfx:/usr/lib/jvm/java-8-oracle# echo $JAVA_HOME 
/usr/lib/jvm/java-8-oracle

 先删除上面创建的用户:

root@xkfx:/# userdel tomcat
root@xkfx:/# who # 查看当前登陆用户
root     pts/0        2018-02-23 10:13 (*******)

 1

root@xkfx:/# cd /opt/
root@xkfx:/opt# ls -lsh
total 4.8M
4.0K drwxr-xr-x 9 999 999 4.0K Feb 22 21:16 apache-tomcat-8.0.41-src
4.8M -rw-r--r-- 1 999 999 4.8M Jan 19  2017 apache-tomcat-8.0.41-src.tar.gz
   0 lrwxrwxrwx 1 999 999   25 Feb 22 21:19 tomcat-latest -> /opt/apache-tomcat-8.0.41
root@xkfx:/opt# mv apache-tomcat-8.0.41-src tomcat8
root@xkfx:/opt# ls -lsh
total 4.8M
4.8M -rw-r--r-- 1 999 999 4.8M Jan 19  2017 apache-tomcat-8.0.41-src.tar.gz
4.0K drwxr-xr-x 9 999 999 4.0K Feb 22 21:16 tomcat8
   0 lrwxrwxrwx 1 999 999   25 Feb 22 21:19 tomcat-latest -> /opt/apache-tomcat-8.0.41

 2

root@xkfx:/opt# sudo useradd -s /sbin/nologin -d /opt/tomcat/temp tomcat
root@xkfx:/opt# sudo chown -R tomcat:tomcat /opt/tomcat8
root@xkfx:/opt# pwd
/opt
root@xkfx:/opt# ls -lsh
total 4.8M
4.8M -rw-r--r-- 1    999    999 4.8M Jan 19  2017 apache-tomcat-8.0.41-src.tar.gz
4.0K drwxr-xr-x 9 tomcat tomcat 4.0K Feb 22 21:16 tomcat8
   0 lrwxrwxrwx 1    999    999   25 Feb 22 21:19 tomcat-latest -> /opt/apache-tomcat-8.0.41

 3

sudo vim /etc/init.d/tomcat8
#!/bin/bash
#
#https://wiki.debian.org/LSBInitScripts
### BEGIN INIT INFO
# Provides:          tomcat8
# Required-Start:    $local_fs $remote_fs $network
# Required-Stop:     $local_fs $remote_fs $network
# Should-Start:      $named
# Should-Stop:       $named
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start Tomcat.
# Description:       Start the Tomcat servlet engine.
### END INIT INFO

export CATALINA_HOME=/opt/tomcat8
export JAVA_HOME=/opt/jdk/jdk1.8.0_66
export PATH=$JAVA_HOME/bin:$PATH

start() {
 echo "Starting Tomcat 8..."
 /bin/su -s /bin/bash tomcat -c $CATALINA_HOME/bin/startup.sh
}
stop() {
 echo "Stopping Tomcat 8..."
 /bin/su -s /bin/bash tomcat -c $CATALINA_HOME/bin/shutdown.sh
}
case $1 in
  start|stop) $1;;
  restart) stop; start;;
  *) echo "Usage : $0 "; exit 1;;
esac

exit 0

 4

root@xkfx:/opt# sudo chmod 755 /etc/init.d/tomcat8
root@xkfx:/opt# ls -lsh /etc/init.d/tomcat8
4.0K -rwxr-xr-x 1 root root 859 Feb 23 11:18 /etc/init.d/tomcat8
root@xkfx:/opt# sudo update-rc.d tomcat8 defaults # Install the script.

 测试后没反应,想起 copy 来的脚本没有修改:

 Linux 笔记 #04# Installing Tomcat 8 on Debian

 改好后还是没有反应!!!

Linux 笔记 #04# Installing Tomcat 8 on Debian

试访问了一下也没有用。。。。。。。。。。

所以 估计 是 脚本根本没跑

How do services in Debian work, and how can I manage them?

换了种方式 有点反应了:

Linux 笔记 #04# Installing Tomcat 8 on Debian

 tomcat 用户是无法登陆的:

root@xkfx:~# su tomcat 
Cannot execute /sbin/nologin: No such file or directory

(su = switch user)

 

 认真看一下发现教程二其实是针对 debian 7 的

于是我干脆找了个 debian 9 的教程 应该和 8.8 更相近。

 1

wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.0.M21/src/apache-tomcat-9.0.0.M21-src.tar.gz
root@xkfx:/opt# ls -lsh
total 9.5M
4.8M -rw-r--r-- 1    999    999 4.8M Jan 19  2017 apache-tomcat-8.0.41-src.tar.gz
4.8M -rw-r--r-- 1 root   root   4.8M Jun 20  2017 apache-tomcat-9.0.0.M21-src.tar.gz
4.0K drwxr-xr-x 9 tomcat tomcat 4.0K Feb 22 21:16 tomcat8
useradd -rs /bin/false tomcat # 删除重新添加
root@xkfx:/opt# mkdir /opt/tomcat
root@xkfx:/opt# tar -C /opt/tomcat/ -zxf apache-tomcat-9.0.0.M21-src.tar.gz 
root@xkfx:/opt# ln -s /opt/tomcat/apache-tomcat-9.0.0.M21-src/ /opt/tomcat/tomcat-latest # 可选的,当更新汤姆猫的时候让事情变得容易
root@xkfx:/opt# chown -R tomcat.tomcat /opt/tomcat/tomcat-latest /opt/tomcat/apache-tomcat-9.0.0.M21-src/ # Make our previously created user tomcat an owner of the entire directories
root@xkfx:/opt/tomcat# ls -lsh
total 4.0K
4.0K drwxr-xr-x 9 tomcat tomcat 4.0K Feb 26 10:41 apache-tomcat-9.0.0.M21-src
   0 lrwxrwxrwx 1 tomcat tomcat   40 Feb 26 10:43 tomcat-latest -> /opt/tomcat/apache-tomcat-9.0.0.M21-src/

 Note, when upgrading tomcat, simply unlink the current symbolic link and recreate new as shown in previous steps.

 

2

干脆重装一下 JDK

root@xkfx:/opt# ls
jdk-8u131-linux-x64.tar.gz  tomcat
root@xkfx:/opt# mkdir /opt/java-jdk
root@xkfx:/opt# tar -C /opt/java-jdk -zxf jdk-8u131-linux-x64.tar.gz
root@xkfx:/opt# update-alternatives --install /usr/bin/java java /opt/java-jdk/jdk1.8.0_131/bin/java 1
root@xkfx:/opt# update-alternatives --install /usr/bin/javac javac /opt/java-jdk/jdk1.8.0_131/bin/javac 1
root@xkfx:/opt# java -version
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)

 没改成,重新设置:

root@xkfx:/opt# sudo update-alternatives --config java
There are 3 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/java-8-oracle/jre/bin/java          1081      auto mode
  1            /opt/java-jdk/jdk1.8.0_131/bin/java              1         manual mode
  2            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      manual mode
* 3            /usr/lib/jvm/java-8-oracle/jre/bin/java          1081      manual mode

Press enter to keep the current choice[*], or type selection number: 1
update-alternatives: using /opt/java-jdk/jdk1.8.0_131/bin/java to provide /usr/bin/java (java) in manual mode
root@xkfx:/opt# java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

 同样的方式改 javac

 

3

root@xkfx:/opt# vim /etc/systemd/system/tomcat.service
[Unit]
Description=Tomcat9
After=network.target

[Service]
Type=forking
User=tomcat
Group=tomcat

Environment=CATALINA_PID=/opt/tomcat/tomcat-latest/tomcat8.pid
Environment=TOMCAT_JAVA_HOME=/usr/bin/java
Environment=CATALINA_HOME=/opt/tomcat/tomcat-latest
Environment=CATALINA_BASE=/opt/tomcat/tomcat-latest
Environment=CATALINA_OPTS=
Environment="JAVA_OPTS=-Dfile.encoding=UTF-8 -Dnet.sf.ehcache.skipUpdateCheck=true -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+UseParNewGC -XX:MaxPermSize=128m -Xms512m -Xmx512m"

ExecStart=/opt/tomcat/tomcat-latest/bin/startup.sh
ExecStop=/bin/kill -15 $MAINPID

[Install]
WantedBy=multi-user.target
root@xkfx:/# systemctl daemon-reload
root@xkfx:/# systemctl start tomcat
Job for tomcat.service failed. See 'systemctl status tomcat.service' and 'journalctl -xn' for details.
root@xkfx:/# systemctl enable tomcat
root@xkfx:/# systemctl status tomcat.service
 tomcat.service - Tomcat9
   Loaded: loaded (/etc/systemd/system/tomcat.service; enabled)
   Active: failed (Result: exit-code) since Mon 2018-02-26 11:07:26 CST; 12min ago

Feb 26 11:07:26 xkfx systemd[1]: Starting Tomcat9...
Feb 26 11:07:26 xkfx systemd[5357]: Failed at step EXEC spawning /opt/tomcat/tomcat-latest/b...nied
Feb 26 11:07:26 xkfx systemd[1]: tomcat.service: control process exited, code=exited status=203
Feb 26 11:07:26 xkfx systemd[1]: Failed to start Tomcat9.
Feb 26 11:07:26 xkfx systemd[1]: Unit tomcat.service entered failed state.

Warning: Unit file changed on disk, 'systemctl daemon-reload' recommended.
Hint: Some lines were ellipsized, use -l to show in full.
Feb 26 11:07:26 xkfx systemd[5357]: Failed at step EXEC spawning /opt/tomcat/tomcat-latest/bin/startup.sh: Permission denied
root@xkfx:/# ls -lsh /opt/tomcat/tomcat-latest/bin/startup.sh
4.0K -rw-r--r-- 1 tomcat tomcat 1.9K May  5  2017 /opt/tomcat/tomcat-latest/bin/startup.sh

持续 debug 

root@xkfx:/# chmod -R u+x /opt/tomcat/tomcat-latest
root@xkfx:/# ls -lsh /opt/tomcat/tomcat-latest/bin/startup.sh
4.0K -rwxr--r-- 1 tomcat tomcat 1.9K May  5  2017 /opt/tomcat/tomcat-latest/bin/startup.sh
root@xkfx:/# systemctl start tomcat
Job for tomcat.service failed. See 'systemctl status tomcat.service' and 'journalctl -xn' for details.
root@xkfx:/# systemctl status tomcat.service -l
 tomcat.service - Tomcat9
   Loaded: loaded (/etc/systemd/system/tomcat.service; enabled)
   Active: failed (Result: exit-code) since Mon 2018-02-26 12:45:22 CST; 27s ago
  Process: 5509 ExecStart=/opt/tomcat/tomcat-latest/bin/startup.sh (code=exited, status=2)

Feb 26 12:45:22 xkfx startup.sh[5509]: touch: cannot touch ‘/opt/tomcat/tomcat-latest/logs/catalina.out’: No such file or directory
Feb 26 12:45:22 xkfx systemd[1]: tomcat.service: control process exited, code=exited status=2
Feb 26 12:45:22 xkfx systemd[1]: Failed to start Tomcat9.
Feb 26 12:45:22 xkfx systemd[1]: Unit tomcat.service entered failed state.
Feb 26 12:45:22 xkfx startup.sh[5509]: /opt/tomcat/tomcat-latest/bin/catalina.sh: 434: /opt/tomcat/tomcat-latest/bin/catalina.sh: cannot create /opt/tomcat/tomcat-latest/logs/catalina.out: Directory nonexistent
root@xkfx:/opt/tomcat/tomcat-latest# mkdir logs
root@xkfx:/opt/tomcat/tomcat-latest# systemctl start tomcat
Job for tomcat.service failed. See 'systemctl status tomcat.service' and 'journalctl -xn' for details.

root@xkfx:/opt/tomcat/tomcat-latest# systemctl status tomcat.service -l
...
Feb 28 11:03:03 xkfx startup.sh[7841]: touch: cannot touch ‘/opt/tomcat/tomcat-latest/logs/catalina.out’: Permission denied
Feb 28 11:03:03 xkfx systemd[1]: tomcat.service: control process exited, code=exited status=2
Feb 28 11:03:03 xkfx systemd[1]: Failed to start Tomcat9.
Feb 28 11:03:03 xkfx systemd[1]: Unit tomcat.service entered failed state.
Feb 28 11:03:03 xkfx startup.sh[7841]: /opt/tomcat/tomcat-latest/bin/catalina.sh: 434: /opt/tomcat/tomcat-latest/bin/catalina.sh: cannot create /opt/tomcat/tomcat-latest/logs/catalina.out: Permission denied
 

root@xkfx:/opt# chmod -R 777 tomcat/tomcat-latest

root@xkfx:/opt# systemctl daemon-reload

root@xkfx:/opt# systemctl start tomcat
root@xkfx:/opt# systemctl enable tomcat
root@xkfx:/opt# systemctl status tomcat.service -l
● tomcat.service - Tomcat9
Loaded: loaded (/etc/systemd/system/tomcat.service; enabled)
Active: failed (Result: exit-code) since Wed 2018-02-28 11:14:15 CST; 18s ago
Main PID: 7990 (code=exited, status=1/FAILURE)

Feb 28 11:14:15 xkfx startup.sh[7977]: Existing PID file found during start.
Feb 28 11:14:15 xkfx startup.sh[7977]: Removing/clearing stale PID file.
Feb 28 11:14:15 xkfx startup.sh[7977]: Tomcat started.
Feb 28 11:14:15 xkfx systemd[1]: Started Tomcat9.
Feb 28 11:14:15 xkfx systemd[1]: tomcat.service: main process exited, code=exited, status=1/FAILURE
Feb 28 11:14:15 xkfx systemd[1]: Unit tomcat.service entered failed state.
root@xkfx:/opt# ss -ant | grep 8080

感觉是相关问题:

Systemd tomcat.service failed with no errors

还是没有用。。。

 

不创建新用户跑 tomcat

root@xkfx:/opt/tomcat# ls -lsh
total 4.0K
4.0K drwxr-xr-x 9 root root 4.0K Feb 28 14:43 apache-tomcat-8.5.28
   0 lrwxrwxrwx 1 root root   20 Feb 28 14:45 tomcat-lastest -> apache-tomcat-8.5.28
vim ~/.bashrc # export CATALINA_HOME=/path/to/tomcat
$CATALINA_HOME/bin/startup.sh
ss -ant | grep 8080

无人访问:

Linux 笔记 #04# Installing Tomcat 8 on Debian

 有人访问:

Linux 笔记 #04# Installing Tomcat 8 on Debian

 Linux 笔记 #04# Installing Tomcat 8 on Debian

完成。

 


参考资料:

How To Install and Configure Apache Tomcat on a Debian Server

How to Install Apache Tomcat 8 On Debian(教程二)

How to install Tomcat 8 on Debian 8(教程一)

 


推荐阅读
author-avatar
心痛则痛1314
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有