Debian部署Tomcat 注册服务并设置开机启动

news2024/12/22 22:18:50

目录

写在前面

1.准备工作

2.在Linux下安装Tomcat

3.Tomcat注册服务并设置开机启动

 3.1.使用 rc.local 配置开机启动

3.2.使用/etc/init.d

3.3.systemd配置(通用方式)


        在Debian系统上安装Tomcat并将其注册为服务以及设置开机启动的步骤。Tomcat是一个开源的Java Servlet容器,可以用来运行Java Web应用程序。通过本文的指导,能够在Debian系统上快速安装Tomcat,并确保其可以在系统启动时自动启动。

搭建环境

Tomcat:apache-tomcat-8.5.91

Tomcat安装路径:/home/tomcat/

JDK:jdk1.8.0_202

JDK安装路径:/home/jdk1.8.0_202/

操作系统:debain12

1.准备工作

a)下载tomcat linux的包,地址:Apache Tomcat® - Apache Tomcat 8 Software Downloads,我们下载的版本是8.0,下载方式如图:         

b)因为tomcat的安装依赖于Java jdk,所以我们需要在判断linux系统下面是否安装jdk

  1)使用(Xshell)连接到Linux系统下面

  2)输入命令:java -version,如果显示jdk版本号,则证明已经安装,如果不显示,则证明没有安装,如果没有安装,请参考下面地址进行安装:

Debain11安装配置jdk

jdk离线安装包下载地址:

Index of java-local/jdk (huaweicloud.com)

oracle.com/java/technologies/downloads/

安装成功后验证jdk如图所示:  ​

2.在Linux下安装Tomcat

a)然后在Xshell中使用命令跳转到 home 下面创建者自己的文件夹:tomcat

b)然后使用Xftp将tomcat复制到tomcat文件夹下面,如图所示:

​ 

c)将上传的Tomcat8.0解压,解压之后重命名为tomcat,如图所示:

#可以直接解压并命名到home目录
cd /home/tomcat
tar -zxv -f apache-tomcat-8.5.91.tar.gz  

d)启动tomcat 

启动方式常用三种

方式一:当前会话启动

/home/tomcat/bin/startup.sh    #启动tomcat命令

出现如图上所示的信息,则表示启动成功。访问http://127.0.0.1:8080 ,如能够显示Tomcat的主页,则启动成功

ps -ef | grep 'tomcat'

查看我们刚才启动的tomcat服务:


进程id是9814,我们可以使用如下指令将其关闭

kill 9814

方式二: 带日志的当前会话启动

./catalina.sh run

与第一种方式不同的是,第二种方式启动后会显示日志,相当于当前Linux连接会话已经成为了控制台,不能再输入其它Linux指令,而与第一种方式相同的是,当当前连接关闭时,本次启动的tomcat服务也会随之关闭。当然,启动成功后我们也可以使用ctrl + c来直接关闭本次链接会话中tomcat的启动。

方式三:后台永久启动
最简单的写法:

nohup ./startup.sh &

手动指定tomcat启动时的日志路径:

nohup ./startup.sh > log.file 2>&1 & 

想要明白这两者的区别,就要看nohup的具体使用方法了:

>log.file是将command的输出重定向到log.file文件,即输出内容不打印到屏幕上,而是输出到log.file文件中。
2>&1 是将标准出错重定向到标准输出,这里的标准输出已经重定向到了log.file文件,即将标准出错也输出到log.file文件中。最后一个&, 是让该命令在后台执行。
试想2>1代表什么,2与>结合代表错误重定向,而1则代表错误重定向到一个文件1,而不代表标准输出;换成2>&1,&与1结合就代表标准输出了,就变成错误重定向到标准输出。

e)停止Tomcat的命令

/home/tomcat/bin/shutdown.sh    #停止tomcat命令

f)环境变量配置

sudo vi /home/tomcat/bin/catalina.sh

 g)如果系统未配置jdk、tomcat环境变量,在tomcat/bin/catalina.sh添加CATALINA_HOME、CLASSPATH

#tomcat路径
CATALINA_HOME=/home/tomcat/
CLASSPATH=.:$JAVA_HOME/lib:$CATALINA_HOME/lib

g)指定Tomcat的jdk版本

方法1. 在 tomcat/bin/setclasspath.sh 中添加 JAVA_HOME 和 JRE_HOME 的指向

JAVA_HOME=/home/jdk1.8.0_202
JRE_HOME=/home/jdk1.8.0_202/jre

3.Tomcat注册服务并设置开机启动

设置开机启动一共有三种方式,注册为服务常用两种

3.1.使用 rc.local 配置开机启动

直接在 /etc/rc.local 文件最后添加语句 /home/tomcat/bin/startup.sh,重启系统,运行ps -ef|grep java,出现如下信息,则说明tomcat服务自启动了!

/etc/rc.local里面的内容为开机执行的脚本

vi /etc/rc.local
#!/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.
#添加startup.sh的路径
/home/tomcat/bin/startup.sh
exit 0

用这种方式配置的自启动服务将在root 下运行。 注意加在 exit 0上一行

3.2.使用/etc/init.d

/etc/init.d目录下为系统服务脚本

将脚本添加为系统服务的过程:

1.将脚本复制到/etc/init.d目录下

2.添加个755权限,

3.用chkconfig --add 服务名 进行添加

4.用chkconfig --list进行查看

5.用service 服务名 start|stop|restart 执行该服务

1进入tomcat下的bin目录

cd /home/tomcat/bin

 2)复制catalina.sh作为系统服务脚本

#重命名的tomcat为以后的服务名 
cp /home/tomcat/bin/catalina.sh /etc/init.d/tomcat    

3)修改脚本

vi /etc/init.d/tomcat

4)在脚本较前面的位置加下面两行注释

#chkconfig:2345 10 90
#description:Tomcat service

第一行是服务的配置:第一个数字是服务的运行级,2345表明这个服务的运行级是2、3、4和5级(Linux的运行级为0到6);第二个数字是启动优先级,数值从0到99;第三个数是停止优先级,数值也是从0到99。

第二行是对服务的描述

如果该注释有误,在添加服务时会出现“tomcat不支持chkconfig”的错误提示

5)在脚本中设置环境变量

同时在文件 /etc/init.d/tomcat

CATALINA_HOME=/home/tomcat/
CLASSPATH=.:$JAVA_HOME/lib:$CATALINA_HOME/lib
JAVA_HOME=/home/jdk1.8.0_202

6)添加脚本的可执行权限

chmod 777 /etc/init.d/tomcat

7)添加为系统服务

chkconfig --add tomcat

8)查看系统服务列表

chkconfig --list

7.启动和停止tomcat

service tomcat start   #启动tomcat
service tomcat stop    #停止tomcat
service tomcat restart  #重启tomcat

/etc/init.d目录下为系统服务脚本

注意:启动服务时 出现一个,始终不知道这是什么错和什么原因,网上查了一下说执行一下这个命令  systemctl daemon-reload  ,然后再次重新启动Tomcat就启动成功了

3.3.systemd配置(通用方式)

        system daemon 系统守护进程。Systemd 可以管理所有系统资源。不同的资源统称为 Unit(单位)。Unit 一共分成12种。我们要设置开机自启动服务就要使用Service unit.

        假设tomcat根目录在/home/tomcat,在目录/lib/systemd/system/下新建文件tomcat.service,内容如下:

1)注册systemctl服务(我更习惯用nano编辑)

vi /lib/systemd/system/tomcat.service
或
vi /usr/lib/systemd/system/tomcat.service

 2)tomcat.service文件内容如下:

[Unit]
#Description指定当前服务的简单描述。
Description=tomcat8测试应用服务
#After表示当前服务在network.target之后启动,可以指定多个服务,以空格隔开。
After=network.target

[Service]
#ExecStart将以fork()方式启动,此时父进程将会退出,子进程将成为主进程。
Type=forking
Environment='JAVA_HOME=/home/jdk1.8.0_202'
Environment='JRE_HOME=/home/jdk1.8.0_202/jre'
# ExecStart指定启动进程时执行的命令。
# ExecReload指定当该服务被要求重新载入配置时所执行的命令。另外,还有一个特殊的环境变量 $MAINPID 可用于表示主进程的P>
# ExecStop指定停止服务时执行的命令。
ExecStart=/home/tomcat/bin/startup.sh
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/home/tomcat/bin/shutdown.sh

#web服务设置私有/tmp或/var/tmp目录
PrivateTmp=true

[Install]
#“WantedBy=multi-user.target”表示当系统以多用户方式(默认的运行级别)启动时,这个服务需要被自动运行。
WantedBy=multi-user.target

3)重新加载systemd管理器的配置

systemctl daemon-reload

4)启动tomcat服务:

systemctl start tomcat
# tomcat启动的大致流程是startup.sh->catalina.sh->setclasspath.sh

5)检查Tomcat服务状态:

systemctl status tomcat

状态Active: active,代表启动成功

 6)设置开机启动如果没有错误,您可以启用Tomcat服务在引导时自动启动:

systemctl enable tomcat

常用命令汇总

命令        功能
systemctl stop tomcat.service停止服务
sudo systemctl disable tomcat.service 取消开机自启动
systemctl restart tomcat.service重启
systemctl enable tomcat.service设置服务自启动
sudo systemctl status tomcat检查Tomcat服务状态

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/779549.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android Studio 提示 Failed to initialize editor问题的解决

Android Studio 从2018的版本升级到2021年的版本后,无法预览xml。我查了很久,最后发现是Gradle的版本和工具不匹配,按照开发工具的提示,升级版本即可,我的是从3.2.1升级到了4.2.2

在macOS、Windows上使用VSCode + SSH实现远程Matplotlib图形显示

简介 在 macOS 上使用 VSCode SSH 环境来显示 Matplotlib 绘制的图形需要进行一些配置。因为默认情况下, Matplotlib 的图形是无法显示在远程计算机的桌面上的。您可以通过设置 Matplotlib 使用不同的后端(backend)来实现将图形显示在本地计算机上。 第一步&…

CentOS: $‘\r‘: command not found

一、问题 在CentOS中执行脚本deploy.sh时,报错$‘\r’: command not found 原因:shell脚本是在Windows下编写,通过工具软件传输到CentOS中。而Windows下行结尾符号为\r\n ,linux下行结尾时\n,两者不同,所…

SpringBoot整合Redis和RabbitMQ练习

需求:用SpringBootRedisRabbitMQ技术,PostMan发送一个请求,存储到Redis中,并且在控制台获取打印该信息。用PostMan发送一个请求将信息存储到RabbitMQ,并且在监听该队列打印出信息。 练习1:SpringBootRedis PostMan发送一个请求,存…

【车载开发系列】AUTOSAR DemEventParameters

【车载开发系列】AUTOSAR DemEventParameters 【车载开发系列】AUTOSAR DemEventParameters 【车载开发系列】AUTOSAR DemEventParameters一. DemEventParameters的概念二. EventID三. DemEventKind1)DEM_EVENT_KIND_SWC2)DEM_EVENT_KIND_BSW 四. DemDTC…

Netty理论与实践(二) 创建http客户端 服务端

目录 开发实战1. 使用echo服务器模拟http2. netty http核心类3. 服务端4. 客户端 总结和源码参考 开发实战 1. 使用echo服务器模拟http 通过上一篇文章中的echo服务器程序来模拟一次HTTP请求。 接收消息的代码如下: public class ServerStringHandler extends S…

Acwing.003 完全背包问题(DP动态规划)

题目 有 N 种物品和一个容量是 V 的背包,每种物品都有无限件可用。 第 i 种物品的体积是 vi,价值是 wi。 求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。 输出最大价值。 输入格式 第一行两个整…

【计算机网络】简易UDP网络小程序

文章目录 1. socket函数:创建套接字2. 服务端2.1 服务端创建套接字2.2 服务端绑定2.3 字符串IP和整数IP2.4 运行服务器 3. 客户端3.1 客户端创建套接字3.2 启动客户端 4. 本地测试5. INADDR_ANY 1. socket函数:创建套接字 我们把服务封装成一个类&#…

计算机网络最基础知识介绍

OSI和TCP/IP是很基础但又非常重要的知识,很多知识点都是以它们为基础去串联的,作为底层,掌握得越透彻,理解上层时会越顺畅。今天这篇网络基础科普,就是根据OSI层级去逐一展开的。 01 计算机网络基础 01 计算机网络的分类 按照网络的作用范围:广域网(WAN)、城域网(MA…

【Kafka源码走读】Admin接口的客户端与服务端的连接流程

注:本文对应的kafka的源码的版本是trunk分支。写这篇文章的主要目的是当作自己阅读源码之后的笔记,写的有点凌乱,还望大佬们海涵,多谢! 最近在写一个Web版的kafka客户端工具,然后查看Kafka官网,…

Python基础教程:sklearn机器学习入门

1. sklearn基础介绍 sklearn(全名为scikit-learn)是一个建立在NumPy、SciPy和matplotlib等科学计算库的基础上,用于机器学习的Python开源库。它提供了丰富的工具和函数,用于处理各种机器学习任务,包括分类、回归、聚类…

线性表的顺序存储和链式存储—Python数据结构(二)

线性表 定义: 线性表的定义是描述其逻辑结构,而通常会在线性表上进行的查找、插入、删除等操作。 线性表作为一种基本的数据结构类型,在计算机存储器中映象(表示)一般有两种形式,一种是顺序映象,一种是链式映象。 线…

接口漏洞-WebService-wsdl+SOAP-Swagger+HTTP-WebPack

什么是接口? 接口就是位于复杂系统之上并且能简化你的任务,它就像一个中间人让你不需要了解详细的所有细节。像谷歌搜索系统,它提供了搜索接口,简化了你的搜索任务。再像用户登录页面,我们只需要调用我们的登录接口&am…

Jupyter 安装和使用

安装Jupyter 使用pip工具进行安装,在命令提示窗口输入命令如下: pip install jupyter notebook 使用Jupyter 在命令提示窗口输入如下命令,启动浏览器页面: jupyter notebook 修改jupyter的工作路径/存储路径 由于默认工作路…

去括号问题(C++处理)

继http://t.csdn.cn/kIcUT后的文章 题目描述 当老师不容易,尤其是当小学的老师更难:现在的小朋友做作业喜欢滥用括号。 虽然不影响计算结果,但不够美观,容易出错,而且可读性差。但又不能一棒子打死,也许他们就是将来的…

【Linux从入门到精通】进程的控制(进程退出+进程等待)

本篇文章主要讲述的是进程的退出和进程等待。希望本篇文章的内容会对你有所帮助。 文章目录 一、fork创建子进程 1、1 在创建子进程中操作系统的作用 1、2 写时拷贝 二、进程终止 2、1 常见的进程退出 2、2 进程的退出码 2、2、1 运行结果正确实例 2、2、2 运行结果不正确实例…

防御第二天-防火墙演示实验

1.上课思维导图 2.防火墙演示实验 防火墙FW1&#xff1a;原用户名&#xff1a;admin 原密码&#xff1a;Admin123 配地址&#xff1a;<USG6000V1>sy [USG6000V1]int g0/0/0 [USG6000V1-GigabitEthernet0/0/0]ip add 192.168.18.2 24 打开所有权限[USG6000V1-Gig…

C++(一):基本数据类型

基本数据类型 基本内置类型定义变量type field value;type field(value);type field{value};type field {value}; 数学常量及函数静态类型转换 static_cast格式化字符串std::stringstreamstd::string引入三方库 fmt/core.h 字符运算auto 关键字枚举类型数据类型定义别名判断是…

牛客网刷题之链表(一)

链表 NB1 删除链表峰值NB2 牛群排列去重NB3 调整牛群顺序NB4 牛群的重新分组NB5 牛群的重新排列NB6 合并两群能量值&#xff08;合并有序单链表&#xff09;NB7 牛群的能量值&#xff08;单链表相加&#xff09; 以下题全部出自牛客网。 题目题目考察的知识点链表&#xff1a; …

Element Plus 日期选择器

计算开始日期到结束日期的总天数 结构 <el-form-item label"计划开始时间" required prop"StartTime"><el-date-pickertype"date"v-model"ruleForm.StartTime":disabled-date"StartTime"placeholder"计划开始…