linux服务器nohup命令及其常用参数和符号的意义

nohup java -jar -Xms150m -Xmx300m -XX:MetaspaceSize=1024M -XX:MaxMetaspaceSize=2048M overhaul.jar >/dev/null 2>&1 &。

这条命令的意思是启动一个 Java 程序,并将程序运行的输出(包括错误信息)完全丢弃,程序会在后台运行。详细解释如下:

命令结构:

nohup java -jar -Xms150m -Xmx300m -XX:MetaspaceSize=1024M -XX:MaxMetaspaceSize=2048M overhaul.jar >/dev/null 2>&1 &

各部分含义:

  1. nohup

    • nohup 是 "no hang up" 的缩写。它会使命令在后台运行,并且即使当前终端会话被关闭,程序也不会被终止。常用于在远程服务器上运行长时间运行的程序,确保它在会话断开后仍然执行。
  2. java -jar

    • java 是 Java 虚拟机(JVM)的启动命令。
    • -jar 指定要运行一个 JAR 文件,即 overhaul.jar
  3. -Xms150m

    • -Xms 指定 JVM 的初始堆内存大小为 150MB。这意味着程序启动时会分配 150MB 的内存用于堆空间。
  4. -Xmx300m

    • -Xmx 指定 JVM 的最大堆内存大小为 300MB。这是 JVM 可以使用的最大内存量,超过这个值,JVM 会进行垃圾回收。
  5. -XX:MetaspaceSize=1024M

    • -XX:MetaspaceSize 设置 JVM 内存中用于存储类元数据的初始大小为 1024MB(1GB)。Metaspace 是 Java 8 以后用于替代永久代(PermGen)来存放类的元数据。
  6. -XX:MaxMetaspaceSize=2048M

    • -XX:MaxMetaspaceSize 设置 JVM 的 Metaspace 区域的最大内存为 2048MB(2GB)。如果 Metaspace 内存超过这个大小,JVM 会抛出 OutOfMemoryError
  7. overhaul.jar

    • 这是要启动的 JAR 文件,即 Java 应用程序的入口文件。程序将在这个文件中执行。
  8. >/dev/null 2>&1

    • 这是输出重定向的部分,指示将程序的所有输出丢弃。
      • >/dev/null:将标准输出(stdout)重定向到 /dev/null,这是一个特殊的设备文件,它丢弃任何写入它的数据,相当于 "黑洞"。
      • 2>&1:将标准错误(stderr)重定向到标准输出(stdout),也就是 /dev/null,这意味着错误信息也会被丢弃。
      • 2 代表标准错误流,1 代表标准输出流,&1 表示将标准错误流重定向到标准输出流。这意味着所有的错误信息和普通输出信息都会被写入到同一个文件
  9. &

    • & 将命令放入后台执行。这意味着你在终端中运行命令后,程序会在后台继续执行,而不会占用当前终端会话。

总结:

这条命令的作用是:

  • 使用 nohup 启动一个 Java 程序(overhaul.jar),确保即使终端会话关闭,程序也能继续运行。
  • 设置 JVM 的内存参数(初始堆内存为 150MB,最大堆内存为 300MB,Metaspace 初始大小为 1GB,最大 Metaspace 大小为 2GB)。
  • 将程序的所有输出(标准输出和标准错误)重定向到 /dev/null,即丢弃所有日志信息。
  • 将程序放在后台执行,终端会话关闭后程序依然继续运行。

为什么有意思:

这条命令有几个有意思的地方:

  1. 日志丢弃

    • 通常来说,运行 Java 程序时会将日志输出到文件中,以便后续查看。但是这里所有的输出(包括标准输出和错误输出)都被丢弃了(>/dev/null 2>&1)。这意味着你根本不会获得程序运行的任何反馈,除非它抛出了严重的错误或异常(如 OutOfMemoryError),这类错误会导致程序崩溃。
  2. 后台运行

    • 程序在后台运行,用户可以继续执行其他任务,而不需要等待 Java 程序的完成。这通常用于在服务器上运行长期任务(例如处理数据、定时任务等)。
  3. 内存配置

    • JVM 的内存配置(堆内存和 Metaspace 内存)设定得相对较大,可能是为了应对高内存需求的应用,或者为了防止由于内存不足而导致的垃圾回收或内存溢出问题。

总的来说,这条命令常用于生产环境中启动长时间运行的 Java 应用,尤其是在不需要日志输出、也不关心输出结果的情况下。

小结:nohup 命令中,>>> 都是用来重定向输出的符号,但它们的行为不同,具体区别如下

1. > 重定向符号
  • > 是用于 覆盖 重定向的符号。
  • 当使用 > 时,它会将输出重定向到指定的文件,如果目标文件已存在,它会 覆盖 该文件中的内容。
  • 如果目标文件不存在,则会创建该文件并写入输出。

示例:

nohup java -jar app.jar > output.log &

在这个例子中,所有 nohup 命令的标准输出(stdout)会被重定向到 output.log 文件。如果 output.log 文件已经存在,它会被清空并写入新的输出内容。

2. >> 重定向符号
  • >> 是用于 追加 重定向的符号。
  • 使用 >> 时,它会将输出重定向到指定的文件,如果文件已经存在,新的输出将会被 追加 到文件的末尾,而不会覆盖文件的原有内容。
  • 如果目标文件不存在,则会创建该文件并写入输出。

示例:

nohup java -jar app.jar >> output.log &

在这个例子中,nohup 命令的标准输出会被追加到 output.log 文件的末尾。如果 output.log 文件不存在,它会被创建并写入输出内容。

总结:

  • >:覆盖输出到文件,会清空文件中的内容后写入新的数据。
  • >>:追加输出到文件,保留文件原有内容,将新数据追加在文件的末尾。

示例应用:

假设你要在运行一个长期任务时收集日志,并且希望每次运行时将日志追加到现有日志文件中,而不是覆盖之前的内容,那么应该使用 >>

例如:

nohup java -jar myapp.jar >> myapp.log 2>&1 &

在这个命令中,>> myapp.log 会将标准输出追加到 myapp.log 文件中,而 2>&1 会将标准错误输出也重定向到标准输出,这样所有的输出(包括错误信息)都会被追加到 myapp.log 中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值