首页 > 系统相关 >Linux 运行jar包的几种方式

Linux 运行jar包的几种方式

时间:2023-06-22 20:25:58浏览次数:40  
标签:输出 java log jar dev 几种 nohup Linux

感谢!原文链接:https://blog.csdn.net/qq_42169450/article/details/122688940

一、Linux 运行jar包的几种方式

  • 方式一: java -jar xxx.jar

最常用的启动jar包命令,特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出

  • 方式二: java -jar xxx.jar &

&代表在后台运行 ,ctrl+c 后程序也会继续运行

  • 方式三: nohup java -jar xxx.jar &

nohup 即 no hang up 不挂断 ,关闭SSH客户端连接,程序不会中止运行

缺省情况下该作业的所有输出被重定向到nohup.out的文件中,如何让输出的内容重定向到指定的文件呢?

  • 方式四:nohup java -jar xxx.jar >aaa.log &

command >out.file 是将commandd 输出重定向到out.flie文件,即输出内容不打印到屏幕上,而是输出到out.file文件中

  • 方式五:nohup java -jar spring-boot-demo.jar > springboot.log 2>&1 &

363c896c36dec3783bb93a3ebe312a58.png

  • 方式六:nohup java -jar spring-boot-demo.jar > /dev/null 2>&1 &

不输出日志

二、nohup 和 &

使用&后台运行程序:
  • 结果会输出到终端
  • 使用Ctrl + C,程序免疫
  • 关闭session,程序关闭
使用nohup运行程序:
  • 结果默认会输出到nohup.out
  • 使用Ctrl + C,程序关闭
  • 关闭session,程序免疫

平日线上经常使用nohup&配合来启动程序

三、> /dev/null 2>&1

  • > 标准重定向符,允许我们创建一个 0KB 的空文件。它通常用于重定向一个命令的输出到一个新文件中。在没有命令的情况下使用重定向符号时,它会创建一个文件。
  • /dev/null 可以看作黑洞,等价于一个只写文件。所有写入它的内容都会永远丢失,尝试从它那儿读取内容则什么也读不到。也就是将所有产生的日志将被丢弃
  • 2>&1 符号>&是一个整体代表将标准错误2重定向到标准输出1,如果是2>1的话,代表将标准错误输出到文件1,而不是重定向到标准输出流

先了解下1和2在Linux中代表什么

当Linux执行一个程序时,会自动打开三个流

0:标准输入流(默认是键盘)
1:标准输出流(默认是屏幕)
2:标准错误流(默认是屏幕)

名称 代码 操作符 java中表示 Linux中文件描述符
标准输入(stdin) 0 < 或 << System.in /dev/stdin -> /proc/self/fd/0 -> /dev/pts/0
标准输出(stdout) 1 >, >>, 1> 或 1>> System.out /dev/stdout -> /proc/self/fd/1 -> /dev/pts/0
标准错误输出(stderr) 2 2> 或 2>> System.err /dev/stderr -> /proc/self/fd/2 -> /dev/pts/0

从上表看出,平常使用的 echo 'hello' > a.log 可以写成 echo 'hello' 1> a.log

为什么2>&1要放在后面 ? 如下一条shell命令 nohup java -jar app.jar >log 2>&1 & 我们不妨把1和2都理解是一个指针,然后来看上面的语句就是这样的:

本来1----->屏幕 (1指向屏幕)
​ 执行>log后, 1----->log (1指向log)
​ 执行2>&1后, 2----->1 (2指向1,而1指向log,因此2也指向了log)

再来分析下nohup java -jar app.jar 2>&1 >log &
​ 本来1----->屏幕 (1指向屏幕)
​ 执行2>&1后, 2----->1 (2指向1,而1指向屏幕,因此2也指向了屏幕)
​ 执行>log后, 1----->log (1指向log,2还是指向屏幕)
​ 所以这就不是我们想要的结果。

每次都写">log 2>&1"太麻烦,能简写吗?可以简写成 &>log>&log

nohup java -jar app.jar 2>&1 >log & 简写成:nohup java -jar app.jar &>log &

标签:输出,java,log,jar,dev,几种,nohup,Linux
From: https://www.cnblogs.com/javaxubo/p/17498236.html

相关文章

  • linux下根据端口号查询对应进程
    1、命令lsof,以查找占用端口80为例,用法如下:[root@localhostnginx]#lsof-i:80--命令[root@localhostnginx]#--返回什么都没有表示:没有进程占用80端口[root@localhostsbin]#lsof-i:80COMMANDPIDUSERFDTYPEDEVICESIZE/OFFNODENAMEnginx8246root6uI......
  • 记一次Unable to open nested entry ‘BOOT-INFlib.jar‘. It has been compressed
    感谢原文:https://blog.csdn.net/weixin_38084097/article/details/126479173问题背景前段时间由于工作失误,误将工程项目中某一个依赖包没有添加@loadbalanced注解就直接打包依赖到的主工程中,并发送项目现场测试。出来混的,迟早都要还的。这不,今天就接到项目现场测试部同事投诉,说......
  • 软件加壳混淆--几种工具
    (33条消息)[C#]代码混淆和加壳_c#混淆_(-:LYSM:-)的博客-CSDN博客最有用的:(33条消息)新发的日常小实验——使用.NETReactor对.NET程序进行加壳保护(反编译、加壳、混淆)_林新发的博客-CSDN博客 ......
  • linux怎么查看jdk安装路径
    linux查看jdk安装路径方法1:使用echo$JAVA_HOME使用$JAVA_HOME的话能定位JDK的安装路径的前提是配置了环境变量$JAVA_HOME,否则如下所示,根本定位不到JDK的安装路径方法2:使用rpm-qa|grepjava如果JDK是源码安装的话,那么这个方法也是行不通的。也就是说rpm–qlpackagename......
  • Qt编写跨平台的推流工具(支持win/linux/mac/嵌入式linux/安卓等)
    一、前言跨平台的推流工具当属OBS最牛逼,功能也是最强大的,唯一的遗憾就是多路推流需要用到插件,而且CPU占用比较高,默认OBS的规则是将对应画布中的视频画面和设定的音频一起重新编码再推流,意味着肯定占用不少CPU资源,而很多时候尤其是视频监控行业,往往源头的摄像头的视频流就是标准的......
  • linux中用crontab定时任务启动jar无效的问题
    原文链接:https://blog.csdn.net/for_the_time_begin/article/details/113940508问题:使用linux系统中的定时任务执行jar包,但是经过测试发现一只不能正常执行,发现定时任务crontab是正常运行的,因为再写一个测试用的定时任务指定时间在指定的目录位置下生成一个文件,或者向文件中追......
  • linux 中printf函数
     001、输出字符串[root@PC1test01]#printf"abcd\n"abcd[root@PC1test01]#printf"%s\n""abcd"##输出字符串abcd 002、指定宽度[root@PC1test01]#printf"%s\n""abcd"abcd[root@PC1test01]#printf&quo......
  • 记一次服务程序调试过程(linux进程打开文件句柄过多问题)
    最近在测试服务程序,对外提供HTTP服务(使用c++调用libevent实现,回调使用curl库)。开始测试几百个请求时,功能一直挺正常。但是加大请求数量后(请求量大于5000),出现很奇怪的现场,每次接收的响应大约在3400个左右时,服务程序不再返回响应。开始怀疑是http服务异常了,使用http工具单独再发请......
  • STM32-mp157-A核Linux
    A核开发环境网卡连接1.NAT虚拟网卡连接互联网2.桥接(真实)网卡连接开发板ubuntu新建NAT网卡;设置桥接模式;搜索vmnet以管理员身份打开;设置桥接网卡为目标usb网卡;打开虚拟机linux网络设置;设置静态IPv4同一网段;ifconfig命令查看;打开windows网络设置;设置静态IPv4同一网段;打开终......
  • Linux系统的CVE该如何确认?学会这个方法不用慌!
    在维护过程中,应用系统免不了被客户做定期的漏扫,运维需要根据客户的扫描结果进行反馈是否涉及和是否能整改,本文主要针对LinuxCVE漏洞进行一个基本的排查。一、什么是CVE漏洞?CVE是CommonVulnerabilitiesandExposures的缩写,意思是“常见漏洞披露”。它是一个由Microsoft、Goog......