当前位置: 首页 > 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…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

docker 部署发现spring.profiles.active 问题

报错&#xff1a; org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...