织梦模板 行业网站,内蒙建设厅网站,wordpress环境配置,小米路由hd 做网站日常开发中#xff0c;相信大家会经常用到这么一行命令#xff1a;
ps -ef | grep xxx.jar | grep -v grep | awk {print $2} | xargs -r kill -9
就是杀掉xxx相关的进程#xff0c;然后启动#xff0c;当然也还有其他的方式可以实现类似的功能#xff0c;我就不列举了相信大家会经常用到这么一行命令
ps -ef | grep xxx.jar | grep -v grep | awk {print $2} | xargs -r kill -9
就是杀掉xxx相关的进程然后启动当然也还有其他的方式可以实现类似的功能我就不列举了另外呢现在很多公司可能也都把项目上云了大部分情况都不需要自己写脚本重启服务这个命令中在kill前面的一大串其实就是获取xxx.jar这个服务的jvm进程号然后传递给kill -9命令那么除了这种方式还有没有其他办法获取到jvm进程号呢下面就我知道的分享一下不喜勿喷
第一种通过java代码获取获取到之后不管是输出到文件还是输出到控制台都可以当然是建议输出到文件了代码如下
public class MyJvm {public static void main(String[] args) {String jvmName ManagementFactory.getRuntimeMXBean().getName();int pid Integer.parseInt(jvmName.split()[0]);System.err.println(当前jvm进程PID: pid);try {java.io.FileWriter fw new java.io.FileWriter(myjvm.pid);fw.write(pid );fw.flush();fw.close();} catch (java.io.IOException e) {e.printStackTrace();}}
} 第二种就是logback日志中获取现在大部分的javaweb项目应该基本上都是用springboot构建springboot默认采用logback日志记录日志里面内置了变量可以直接获取进程号关键代码如下
?xml version1.0 encodingUTF-8?
configurationproperty namelog.pattern value[PID${PID}]%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n /!-- 控制台输出 --appender nameconsole classch.qos.logback.core.ConsoleAppenderencoderpattern${log.pattern}/pattern/encoder/appenderroot levelinfoappender-ref refconsole //root
/configuration SpringBootApplication
public class LogjvmApplication {private static final org.slf4j.Logger LOGGER org.slf4j.LoggerFactory.getLogger(LogjvmApplication.class);public static void main(String[] args) {String jvmName ManagementFactory.getRuntimeMXBean().getName();int pid Integer.parseInt(jvmName.split()[0]);LOGGER.info(当前系统进程号 pid);SpringApplication.run(LogjvmApplication.class, args);}} 第三种通过MDC设置进程编号变量
SpringBootApplication
public class LogjvmApplication {private static final org.slf4j.Logger LOGGER org.slf4j.LoggerFactory.getLogger(LogjvmApplication.class);public static void main(String[] args) {String jvmName ManagementFactory.getRuntimeMXBean().getName();int pid Integer.parseInt(jvmName.split()[0]);LOGGER.info(当前系统进程号 pid);// 将 PID 放入 MDCMDC.put(pid, pid );SpringApplication.run(LogjvmApplication.class, args);try {java.io.FileWriter fw new java.io.FileWriter(logjvm_pid);fw.write(pid );fw.flush();fw.close();} catch (java.io.IOException e) {LOGGER.error(写入文件失败, e);}}}
?xml version1.0 encodingUTF-8?
configurationproperty namelog.pattern value[PID%X{pid}]%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n /!-- 控制台输出 --appender nameconsole classch.qos.logback.core.ConsoleAppenderencoderpattern${log.pattern}/pattern/encoder/appenderroot levelinfoappender-ref refconsole //root
/configuration
与第二种不同的是在logback日志中获取进程号的表达式不一样PID%X{pid}