Linux 运行jar包的几种方式

本文详细介绍了在Linux环境下通过java-jar命令运行jar包的五种方式,包括在前台和后台运行,并重点讲解了nohup和输出重定向符号如>>、2>&1的应用,以及为何需要理解和正确使用这些技术。
摘要由CSDN通过智能技术生成

一、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 &


方式六: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 &

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用以下命令来查找jar包位置: 1. 使用find命令查找: ``` find / -name "*.jar" ``` 这个命令会在根目录下查找所有后缀为.jar的文件,并输出它们的路径。 2. 使用locate命令查找: ``` locate *.jar ``` 这个命令会在系统的数据库中查找所有后缀为.jar的文件,并输出它们的路径。需要注意的是,如果你刚刚安装了一个新的jar包,可能需要使用updatedb命令更新数据库。 3. 使用whereis命令查找: ``` whereis jar ``` 这个命令会查找系统中所有与jar相关的文件,并输出它们的路径。 4. 使用which命令查找: ``` which jar ``` 这个命令会查找系统中所有与jar相关的可执行文件,并输出它们的路径。 以上是几种常用的查找jar包位置的方法,可以根据自己的需要选择合适的方法。 ### 回答2: Linux是一款开源的操作系统,有着强大的命令行工具,可以方便的查找jar包的位置。本文将介绍两种常用的方法。 第一种方法是用find命令查找。find命令是Linux下用于查找文件的命令,可以在系统中查找指定名称、类型、大小、修改时间等属性的文件。查找jar包的位置可以按照以下方法进行: 1. 打开终端,进入需要查找的目录或者在根目录下执行命令。 2. 执行以下命令: ``` find . -name "*.jar" ``` 其中"."表示当前目录,"*.jar"表示查找以.jar结尾的文件名。命令执行后,系统会遍历当前目录及其子目录并输出找到的所有jar包的位置。可以根据输出信息找到对应的jar包位置。 第二种方法是用whereis命令查找。whereis命令是Linux下用于查找二进制程序、源码文件和man手册页等文件的命令。查找jar包位置可以按照以下方法进行: 1. 打开终端。 2. 执行以下命令: ``` whereis 文件名 ``` 其中"文件名"表示需要查找的jar包名称,如: ``` whereis myproject.jar ``` 执行命令后,系统会输出所有有关该文件的信息,包括文件位置和man手册位置等。 以上就是利用两种方法在Linux下查找jar包位置的简单介绍。无论是使用find命令还是whereis命令,在终端下输入相应命令即可查找到jar包的位置。 ### 回答3: 在Linux系统中,查找一个jar包的位置通常可以通过以下几种方法: 1. 使用find命令 在终端中运行以下命令: ```bash find / -name "*.jar" ``` 该命令会在整个文件系统中搜索所有.jar文件,并列出它们的位置。由于搜索整个文件系统可能需要很长时间,因此您可以替换“/”为特定目录,例如“/usr/share/java/”,该目录通常存放Java包文件。 2. 使用locate命令 在终端中运行以下命令: ```bash locate *.jar ``` 该命令会使用名称数据库快速定位.jar文件,不需要搜索整个文件系统。但是需要注意的是,在第一次运行该命令之前,您需要更新名称数据库。可以使用以下命令更新: ```bash sudo updatedb ``` 3. 使用whereis命令 在终端中运行以下命令: ```bash whereis jar ``` 此命令可以找到可执行文件、源代码和帮助文档所在的位置。如果您的系统中安装了Java开发工具包(JDK),则whereis命令通常会指向/usr/bin/jar文件。 4. 使用which命令 在终端中运行以下命令: ```bash which jar ``` 此命令可以定位可执行文件所在路径,如果您的系统中安装了Java开发工具包(JDK),则which命令也通常会指向/usr/bin/jar文件。 以上是Linux系统中查找jar包位置的几种方法,您可以按照自己的需要选择其中一种方法进行使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值