失败一 ※ 失败二 ※ 失败三 ※ 完
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 其实是一样的。
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 目录下是这个情况:
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
按照上面解决方案做抛出这个错误信息 Error message 'sudo: unable to resolve host
成功输入上面的命令 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 来的脚本没有修改:
改好后还是没有反应!!!
试访问了一下也没有用。。。。。。。。。。
所以 估计 是 脚本根本没跑
How do services in Debian work, and how can I manage them?
换了种方式 有点反应了:
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
无人访问:
有人访问:
完成。
参考资料:
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(教程一)