当前位置: 首页 > news >正文

centos 里面的service自启动app.jar,出现两个java进程,app是同一个端口

当使用jps -lv查看java虚拟机进程

app.jar启动后,居然出现两个启动进程,而且他们的端口都一样,同一端口,是不允许启动两个相同app的。

使用进程ps查看进程工具

#ps  -aux

参数说明:

a: 显示跟当前终端关联的所有进程

u: 基于用户的格式显示(U: 显示某用户ID所有的进程)

x: 显示所有进程,不以终端机来区分

发现921是/usr/bin/rhsmcertd根本不是java进程,或者根本没有对应的进程。

难道是jps -lv查询的java进程错误?

卸载订阅管理器 RHSMCERTD服务 rhsmcertd服务,

即Red Hat Subscription Manager CERTification Daemon systemctl stop rhsmcertd.service

# 停止订阅服务 systemctl disable rhsmcertd.service

# 取消订阅服务开机启动 yum remove subscription-manager

jps命令简介

jps(Java Virtual Machine Process Status Tool)是JDK提供的一个可以列出正在运行的Java虚拟机的进程信息的命令行工具,它可以显示Java虚拟机进程的执行主类(Main Class,main()函数所在的类)名称、本地虚拟机唯一ID(LVMID,Local Virtual Machine Identifier)等信息。另外,jps命令只能显示它有访问权限的Java进程的信息。

虽然jps命令的功能比较单一,但它使用的频率却很高。对于本地虚拟机来说,本地虚拟机唯一ID和操作系统的进程ID(PID,Process Identifier)是一致的,如果同时启动多个Java虚拟机进程,无法根据进程名称确定某个进程,我们就是使用jps命令显示主类名称的功能区分出来。

查看java进程

#ps  -ef|grep java

查看端口

#netstat  -anop | grep 80

jps命令参数

命令语法:

jps [-q] [-mlvV] [hostid]

jps [-help]

命令参数说明:

-q:不显示主类名称、JAR文件名和传递给主方法的参数,只显示本地虚拟机唯一ID。

-mlvV:我们可以指定这些参数的任意组合。

-m:显示Java虚拟机启动时传递给main()方法的参数。

-l:显示主类的完整包名,如果进程执行的是JAR文件,也会显示JAR文件的完整路径。

-v:显示Java虚拟机启动时传递的JVM参数。

-V:不显示主类名称、JAR文件名和传递给主方法的参数,只显示本地虚拟机唯一ID。

hostid:指定的远程主机,可以是ip地址和域名, 也可以指定具体协议,端口。如果不指定,则显示本机的Java虚拟机的进程信息。

-help:显示jps命令的帮助信息。

在没有指定任何参数的情况下,jps命令会显示每个Java虚拟机进程的本地虚拟机唯一ID,后面跟着主类名称或JAR文件名的简短形式。

命令显示格式:

LVMID [ [ classname | JARfilename | "Unknown"] [ arg* ] [ jvmarg* ] ]

其中所有输出都以空格分隔,所以当arg或jvmarg中包含空格的时候,有可以不好分辨,需要注意一下。

jps命令示例

显示本机的Java虚拟机进程:

# jps

15729 jar

92153 Jps

90267 Jstat

显示主类的完整包名或JAR文件名:

# jps -l

15729 one-more-1.0.0.RELEASE.jar

112054 sun.tools.jps.Jps

90267 sun.tools.jstat.Jstat

显示主类的完整包名或JAR文件名,并且显示JVM参数:

# jps -lv

15729 one-more-1.0.0.RELEASE.jar -Xmx1g -Xms1g -Xmn512m -XX:SurvivorRatio=4 -XX:MetaspaceSize=256m -XX:+UseG1GC

9043 sun.tools.jps.Jps -Denv.class.path=.:/usr/local/java/jdk1.8.0_251/lib:/usr/local/java/jdk1.8.0_251/jre/lib -Dapplication.home=/usr/local/java/jdk1.8.0_251 -Xms8m

90267 sun.tools.jstat.Jstat -Denv.class.path=.:/usr/local/java/jdk1.8.0_251/lib:/usr/local/java/jdk1.8.0_251/jre/lib -Dapplication.home=/usr/local/java/jdk1.8.0_251 -Xms8m

显示主类的完整包名或JAR文件名,并且显示传递给main()方法的参数:

# jps -lm

15729 one-more-1.0.0.RELEASE.jar

59014 sun.tools.jps.Jps -lm

90267 sun.tools.jstat.Jstat -gc 15729 1000

结尾

虽然jps命令已经推出很久并且使用频率很高,但它仍然是一个“实验性质的,并且没有技术支持的”(Experimental and Unsupported)工具,日后可能会被转正,也有可能在某个JDK版本中无声无息地消失。所以,且用且珍惜吧。

错误答案:

#jps -lv命令会列出所有正在运行的Java进程,包括那些由非标准用户或非标准账户启动的Java进程。

这些进程可能不会在标准的ps命令中列出,因为ps命令只显示由标准用户启动的进程。

#ps  -ef|grep  java  如果你只想查看由标准用户启动的Java进程

#ps  -aux          查看所有用户的进程

标准用户,非标准用户

#cat  /etc/passwd

/etc/passwd是一个文本文件,包含了系统中所有用户的基本信息。这个文件的每一行都表示一个用户的信息,包括用户ID、用户名、用户主目录、用户登录shell等。 以下是一个/etc/passwd文件的示例行:

username:x:1000:1000:username:/home/username:/bin/bash

在这个示例行中,username是用户名,1000是用户ID,1000是用户组ID,username是用户主目录,/bin/bash是用户的登录shell。 /etc/passwd文件的每一行都由7个字段组成,字段之间用冒号分隔。这7个字段的含义如下:

  1. 用户名:表示用户账户的名称。
  2. 用户ID:表示用户账户的唯一标识符。
  3. 用户组ID:表示用户所属的用户组的唯一标识符。
  4. 用户信息:表示用户的一些额外信息,例如用户全名、用户电话号码等。
  5. 用户主目录:表示用户账户的主目录。
  6. 用户登录shell:表示用户登录系统后的默认shell。

你可以使用cat /etc/passwd命令来查看/etc/passwd文件的内容。这个命令会将/etc/passwd文件的内容显示在终端中。

单独查看用户所属的标准

在CentOS系统中,你可以使用id命令来判断一个账户是否为标准账户。

标准账户的用户ID通常是1000或更低的数字,而非标准账户的用户ID通常是1000以上的数字。

#id  hc

#id  root

service服务为什么会启动两个java进程

之前我把Centos8的服务脚本存在/lib/systemd/system/里面,这个是错误的原因

#vi   /lib/systemd/system/yourscript.service

[Unit]

Description=Your Script

After=network.target

[Service]

Type=simple

ExecStart=nohup /home/yourscript.sh &

[Install]

WantedBy=multi-user.target

参数说明:

WantedBy是一个在systemd服务配置文件中常用的选项,用于指定服务何时启动或停止。

multi-user.target是一个目标,用于在系统启动后创建多用户模式。

graphical.target是一个目标,用于在系统启动后创建图形界面模式。

default.target 是一个目标上,然后按照systemd的启动顺序,先启动multi-user.target,再启动graphical.target,最后启动service_name服务。

WantedBy选项可以被设置为多个目标,用逗号分隔。例如,WantedBy=multi-user.target graphical.target,表示这个服务需要在multi-user.target和graphical.target这两个目标上运行。

正确答案:

yourscript.service应该放在/etc/systemd/system文件夹下,而不是/lib/systemd/system文件夹下。

服务运行的用户User及所属组Group都是root。

Type=daemon 必须是通常用于运行后台服务或者守护进程

这样配置问题解决。

#vi   /etc/systemd/system/yourscript.service

[Unit]

Description=Your Script

After=network.target

[Service]

Type=daemon

User=root

Group=root

ExecStart=nohup /home/yourscript.sh &

[Install]

WantedBy=multi-user.target

systemd的使用大幅提高了系统服务的运行效率, Systemd 可以管理所有系统资源,不同的资源统称为 Unit(单位),而unit的文件位置一般主要有三个目录:

/etc/systemd/system    系统管理员安装的单元, 优先级更高

/run/systemd/system    软件运行时生成的配置文件

/lib/systemd/system (/usr/lib/systemd/system)  系统或第三方软件安装时添加的配置文件。软件包安装的单元

这三个目录的配置文件优先级依次从高到低,如果同一选项三个地方都配置了,优先级高的会覆盖优先级低的。

参数说明

systemctl start yourscript.service (启动yourscript服务)

systemctl stop yourscript.service   或者  systemctl stop nginx (停止yourscript服务)

systemctl enable yourscript.service (设置开机自启动)

systemctl disable yourscript.service (停止开机自启动删除服务

systemctl status yourscript.service (查看服务当前状态)

systemctl restart yourscript.service (重新启动服务)

通过/etc/rc.local自启动app.jar

相对service方法,下面的方法配置比较简单,效果一样。

#vi  /etc/rc.local

内容如下:

/home/run_app.sh

#vi  /home/run_app.sh

内容如下:

#!/bin/bash

nohup /home/jdk-17/bin/java -server -Xmx512M -Xms512M -jar /home/app.jar --server.port=80 > /dev/null 2>&1 &

/etc/rc.local是Linux系统启动时运行的自定义脚本文件。它通常位于 /etc/rc.d 目录下,可以通过编辑该文件来添加需要自启动的脚本程序。 在系统启动过程中,rc.local文件会执行自定义的命令和脚本,这些命令会在系统启动后自动执行,并且运行它们的用户必须具有 root 权限。rc.local文件通常用于在系统启动时执行一些自定义的指令或者脚本,例如启动服务、设置环境变量、配置网络等。 在某些Linux发行版中,rc.local文件可能会被其他启动加载文件(例如 /etc/init.d/rc.local)所替代。在Ubuntu系统中,有两个rc.local文件,分别是/etc/rc.local和/etc/init.d/rc.local。在某些情况下,你可能需要在rc.local文件中手动添加一些命令或脚本,以便在系统启动时执行它们。

相关文章:

centos 里面的service自启动app.jar,出现两个java进程,app是同一个端口

当使用jps -lv查看java虚拟机进程 app.jar启动后,居然出现两个启动进程,而且他们的端口都一样,同一端口,是不允许启动两个相同app的。 使用进程ps查看进程工具 #ps -aux 参数说明: a: 显示跟当前终端关联的所有进…...

【算法|双指针系列No.7】leetcodeLCR 007. 三数之和

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…...

ubuntu修改IP地址

参考:ubuntu修改配置IP地址和DNS的方法总结(4种)_ubuntu设置ip地址-CSDN博客 面对ubuntu18以上的版本,主要有两种界面:图形化界面和纯命令行界面。 图形化界面配置比较简单,命令行配置稍许复杂&#xff0c…...

java springboot 通过ConfigurationProperties给第三方bean注入属性

之前我们的文章 java boot将一组yml配置信息装配在一个对象中 讲过了 通过ConfigurationProperties将配置文件中的内容默认装配进属性类 但 这建立在 bean是自己定义的 如果 这是个第三方的类呢? 就比如 我们在 application 中写了一套数据源的加载规则 但需要用第…...

windows系统安装openssl并且转换证书格式

概述 碎碎念,如果你有MAC电脑,就别折腾了,直接用MAC电脑吧,不用安装直接用openssl 本文主要讲到了openssl的基本使用方法,开发环境为windows,开发工具为VS2019.本文主要是说明openssl如何使用,不介绍任何理…...

【GO】基础速成

简单介绍一下go好处 编译语言,可以提前报错同时又有python的一些优点,自带多线程 开始学习 学习网站:学习网站 值 包含:字符串、整型、浮点型、布尔型等等 字符串可以 进行拼接。 需要注意的是布尔型在go里面不自动转化为in…...

五子棋(C语言实现)

目录 构思 1、主程序 2、初始化 3、游戏菜单 4、打印棋盘 6、玩家下棋 7、判断输赢 8、功能整合 人机下棋 完整版: game.h game.c text.c 测试功能代码 构思 五子棋不必多介绍了,大家小时候都玩过哈。 我们要通过程序实现这个小游戏&…...

thymeleaf,bootstrap-fileinput 多文件上传

组件遍历上传 一、前端 <!DOCTYPE html> <html lang"zh" xmlns:th"http://www.thymeleaf.org" > <head><th:block th:include"include :: header(修改固定资产信息)" /><th:block th:include"include :: date…...

爬虫 | 基础模块了解

文章目录 &#x1f4da;http协议&#x1f4da;requests模块&#x1f4da;re模块&#x1f407; re.I 或 re.IGNORECASE&#x1f407;re.M或 re.MULTILINE&#x1f407;re.S 或 re.DOTALL&#x1f407; re.A 或 re.ASCII&#x1f407; re.X 或 re.VERBOSE&#x1f407;特殊字符类…...

CSS复习笔记

CSS 文章目录 CSS1.概念2.CSS 引入方式3.选择器基础选择器:标签选择器类选择器id 选择器通配符选择器 复合选择器:**后代选择器****子代选择器****并集选择器****交集选择器-了解****伪类选择器** 结构伪类选择器&#xff1a;**:nth-child&#xff08;公式&#xff09;**伪元素…...

编译linux的设备树

使用make dtbs命令时 在arch/arm 的目录Makefile文件中有 boot : arch/arm/boot prepare 和scripts是空的 在文件scripts/Kbuild.include中 变量build : -f $(srctree)/scripts/Makefile.build obj build变量虽然没有在arch/arm 的目录Makefile文件中定义&#xff0c;但…...

⛳ MyBatis 中 Mapper 接口工作原理实例解析

&#x1f38d;目录 ⛳ MyBatis 中 Mapper 接口工作原理实例解析&#x1f3a8; 一、Mapper 接口是怎么找到实现类的&#xff1f;&#x1f43e; 二、从一段代码看起&#x1f69c; 三、Mapper 接口&#x1f3ed; 四、Mapper 接口的动态代理类的生成&#x1f381; 五、总结 ⛳ MyBa…...

Android 音频可视化

Android音频可视化&#xff0c;指的是将音频的频率绘制到屏幕上&#xff0c;达到一种视觉效果&#xff0c;使播放或录制过程更加生动形象。 在Android进行视频可视化涉及的三个主要知识点,其中比较难以理解的傅里叶变换公式。 Android原生的Visualizer使用&#xff08;获取频…...

刷机与救砖避坑指南

提示&#xff1a;快速进行刷机和救砖学习理解 文章目录 一、刷机1.什么是刷机&#xff0c;需要进行那些准备&#xff1f;2.刷机1.解开bl&#xff08;bootloader&#xff09;锁2.刷入TWRP和Magsik3.刷入第三方ROM 二、救砖&#xff08;9008&#xff09;1.手机售后一键线刷包&…...

软件建模知识点

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;…...

WSL 配置 Linux

WSL 配置 Linux Windows 启动 Linux 子系统 控制面板 -> 程序和功能&#xff0c; 将 适用于 Linux 的 Windows 子系统 勾选。 安装 Terminal 在 Microsoft Store 市场上搜索 Terminal 安装 Windows Terminal。 安装 编译工具链 sudo apt update # 更新软件包 sudo apt i…...

VS Code:CMake配置

概述 在VSCode和编译器MinGW安装完毕后&#xff0c;要更高效率的进行C/C开发&#xff0c;采用CMake。CMake是一个开源、跨平台的编译、测试和打包工具&#xff0c;它使用比较简单的语言描述编译&#xff0c;安装的过程&#xff0c;输出Makefile或者project文件&#xff0c;再去…...

Flex 词法分析实验实现(电子科技大学编译技术Icoding实验)

Flex 词法分析 此为电子科技大学编译技术 实验1&#xff1a;词法分析 将具体实现中的三个文件和自己的实验报告一起上传才能通过 根据词法分析实验中给定的文法&#xff0c;利用 flex 设计一词法分析器&#xff0c;该分析器从标准输入读入源代码后&#xff0c;输出单词的类别编…...

设计模式——20. 解释器模式

1. 说明 解释器模式(Interpreter Pattern)是一种行为型设计模式,它用于定义一门语言的语法解析,并为该语言创建解释器。该模式将一个问题或领域表达成一个语言,然后提供一个解释器来解释这种语言中的表达式,以执行特定操作。 要点和组成部分: 抽象表达式(Abstract Ex…...

多输入多输出 | MATLAB实现CNN-BiLSTM-Attention卷积神经网络-双向长短期记忆网络结合SE注意力机制的多输入多输出预测

MATLAB实现CNN-BiLSTM-Attention卷积神经网络-双向长短期记忆网络结合SE注意力机制的多输入多输出预测 目录 MATLAB实现CNN-BiLSTM-Attention卷积神经网络-双向长短期记忆网络结合SE注意力机制的多输入多输出预测预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 C…...

Taotoken Token Plan套餐如何为高频用户节省大模型使用成本

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken Token Plan套餐如何为高频用户节省大模型使用成本 对于需要持续、大量调用大模型API的团队或个人开发者而言&#xff0c;…...

联想拯救者工具箱:开源替代方案实现笔记本性能优化与硬件控制

联想拯救者工具箱&#xff1a;开源替代方案实现笔记本性能优化与硬件控制 【免费下载链接】LenovoLegionToolkit Lightweight Lenovo Vantage and Hotkeys replacement for Lenovo Legion laptops. 项目地址: https://gitcode.com/gh_mirrors/le/LenovoLegionToolkit 联…...

3个简单步骤彻底解决GitHub下载龟速问题:Fast-GitHub插件完全指南

3个简单步骤彻底解决GitHub下载龟速问题&#xff1a;Fast-GitHub插件完全指南 【免费下载链接】Fast-GitHub 国内Github下载很慢&#xff0c;用上了这个插件后&#xff0c;下载速度嗖嗖嗖的~&#xff01; 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub 你是…...

基于小波变换与渐进式特征金字塔网络的高效目标检测方法 —— 以电网巡检为例

点击蓝字关注我们关注并星标从此不迷路计算机视觉研究院公众号ID&#xff5c;计算机视觉研究院学习群&#xff5c;扫码在主页获取加入方式https://pmc.ncbi.nlm.nih.gov/articles/PMC12923819/pdf/41598_2026_Article_37017.pdf计算机视觉研究院专栏Column of Computer Vision …...

从ST官方例程到产品级Bootloader:STM32F030 IAP的内存划分、中断重映射与APP配置全解析

从ST官方例程到产品级Bootloader&#xff1a;STM32F030 IAP的内存划分、中断重映射与APP配置全解析 在嵌入式产品开发中&#xff0c;固件升级是一个无法回避的挑战。想象一下&#xff0c;当你的设备已经部署在现场&#xff0c;却发现需要修复一个关键bug或添加新功能时&#xf…...

终极指南:5分钟掌握Blender四边形网格重构神器QRemeshify

终极指南&#xff1a;5分钟掌握Blender四边形网格重构神器QRemeshify 【免费下载链接】QRemeshify A Blender extension for an easy-to-use remesher that outputs good-quality quad topology 项目地址: https://gitcode.com/gh_mirrors/qr/QRemeshify 你是否曾在Blen…...

Visual C++运行库终极指南:如何3分钟解决Windows软件启动失败问题

Visual C运行库终极指南&#xff1a;如何3分钟解决Windows软件启动失败问题 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的场景&#xf…...

别再让角色‘走猫步’:深入浅出图解‘拉绳算法’,5步实现游戏平滑寻路

别再让角色‘走猫步’&#xff1a;深入浅出图解‘拉绳算法’&#xff0c;5步实现游戏平滑寻路 你是否曾在游戏中见过角色沿着路径移动时&#xff0c;像模特走猫步一样左右摇摆&#xff1f;这种不自然的运动不仅影响视觉体验&#xff0c;还可能暴露游戏AI的粗糙。本文将用最直观…...

如何用OpenCore Legacy Patcher让老旧Mac焕发新生:5分钟快速上手指南

如何用OpenCore Legacy Patcher让老旧Mac焕发新生&#xff1a;5分钟快速上手指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 还在为你的老旧Mac无法升级到…...

用Logisim搞定Educoder交通灯实训:从数码管驱动到状态机集成的保姆级避坑指南

用Logisim征服Educoder交通灯实训&#xff1a;从零搭建到联调的全链路实战手册 第一次打开Educoder平台的交通灯实训项目时&#xff0c;我盯着那些闪烁的数码管和错综复杂的线路图&#xff0c;感觉像在破解某种外星密码。三小时后&#xff0c;当我的第一个状态机模块终于通过测…...