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文件中手动添加一些命令或脚本,以便在系统启动时执行它们。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

做web自动化测试遇到Chrome浏览器老是自动更新,怎么办 ? 这里提供两个解决办法 。

web自动化安装驱动安装 进行web自动化时 ,需要提前安装浏览器的驱动 ,尤其是chrome浏览器 。它的更新速度很快 ,是不是更新了新版本 。这就导致我们的驱动也要跟着变化。 1.停止自动更新 那么 ,如何关闭chrome浏览器的自动更新…

6.6 图的应用

思维导图: 6.6.1 最小生成树 ### 6.6 图的应用 #### 主旨:图的概念可应用于现实生活中的许多问题,如网络构建、路径查询、任务排序等。 --- #### 6.6.1 最小生成树 **概念**:要在n个城市中建立通信联络网,则最少需…

项目经理每天,每周,每月的工作清单

很多不懂项目管理的伙伴问,项目经理每天每周每个月的工作是什么呢? 仿佛他们什么都管,但是又没有具体的产出,但是每天看他们比谁都忙,其实很简单,项目中的每个环节负责具体的事情,但是每个环节…

Python文件共享+cpolar内网穿透:轻松实现公网访问

文章目录 1.前言2.本地文件服务器搭建2.1.Python的安装和设置2.2.cpolar的安装和注册 3.本地文件服务器的发布3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 数据共享作为和连接作为互联网的基础应用,不仅在商业和办公场景有广泛的应用&#…

【Linux】六、进程控制

进程创建 fork函数的认识 #include <unistd.h> pid_t fork(void) #include <stdio.h> #include <unistd.h>int main() {printf("我是父进程&#xff01;\n");pid_t id fork();if(id < 0){printf("创建子进程失败\n");return 1;}else…

idea使用debug无法启动,使用run可以启动

1、将调试断点清除 使用快捷键ctrl shift F8&#xff0c;将勾选的选项去除即可 2、Error running SampleApplication: Command line is too long. Shorten command line for SampleApplication or also for Spring Boot default configuration&#xff0c;报这种错误&#x…

Python爬虫:制作一个属于自己的IP代理模块

前言 在Python爬虫过程中&#xff0c;为了避免被网站的反爬虫机制干扰&#xff0c;我们需要使用IP代理。所谓IP代理&#xff0c;就是通过修改网络请求中的IP地址&#xff0c;来达到隐藏真实IP地址的效果。本文将教你如何制作一个自己的IP代理模块&#xff0c;让你的爬虫更加稳…

Hadoop3教程(九):MapReduce框架原理概述

文章目录 简介参考文献 简介 这属于整个MR中最核心的一块&#xff0c;后续小节会展开描述。 整个MR处理流程&#xff0c;是分为Map阶段和Reduce阶段。 一般&#xff0c;我们称Map阶段的进程是MapTask&#xff0c;称Reduce阶段是ReduceTask。 其完整的工作流程如图&#xff…

uniapp-vue3-微信小程序-标签选择器wo-tag

采用uniapp-vue3实现, 是一款支持高度自定义的标签选择器组件&#xff0c;支持H5、微信小程序&#xff08;其他小程序未测试过&#xff0c;可自行尝试&#xff09; 可到插件市场下载尝试&#xff1a; https://ext.dcloud.net.cn/plugin?id14960 使用示例 <template>&…

windows常用命令

一.文件操作 dir&#xff1a;查看文件当前路径目录列表 cd .. &#xff1a;返回上一级目录 cd 路径&#xff1a;进入路径

问题记录1 json解析问题

问题&#xff1a; json解析int类型不符合预期&#xff0c;使用json.NewDecoder解决。 示例如下&#xff1a; package mainimport ("bytes""encoding/json""fmt" )func main() {data1 : map[string]interface{}{}data1["id"] int64(4…

STM32 ---- 再次学习STM32F103C8T6/STM32F409IGT6

目录 一、环境搭建及介绍 关于STM32基础介绍 新建工程 外设案例 LED流水灯 蜂鸣器 上拉电阻和下拉电阻知识 电压比较器 c语言基础知识 类型、结构体、枚举 类型int8_t int16_t int32_t 宏替换 #define 和typedef用法 结构体两种填充方法 和 命名规则 枚举用法 常用…