【Linux】java 后台启动, nohup.out 文件越来越大问题解决

发布时间 2023-05-04 10:58:27作者: aaacarrot

java 后台启动

一些知识点:

1、三个文件描述符

Linux 下均有 0,1,2 三个文件描述符,分别表示标准转入,标准输出,错误输出

可以这样使用,比如:

ll *.jar 1>jars.log—— 这样标准输出会写到 jars.log 文件上
ll *.jar >jars.log 和 ll *.jar 1>jars.log 写法效果一样。

但是 ll *.jar 2>jars.log 这个意思是把错误输出写到 jars.log 文件,但标准输出还是会输出到命令容器。

2、 重定向

2>&1:将错误信息重定向到标准输出

3、特殊文件 /dev/null

Linux下还有一个特殊的文件/dev/null,它就像一个无底洞,所有重定向到它的信息都会消失得无影无踪。这一点非常有用,当我们不需要回显程序的所有信息时,就可以将输出重定向到/dev/null。

如果不想要某类型的输出,就把它的输出写到无底洞 /dev/null
比如标准输出和错误输出都忽略掉,就可以这样写:
ls *.jar 1>/dev/null 2>/dev/null

结合重写向,可以这样玩

ls *.jar >/dev/null 2>&1 (这个写法和:ls *.jar 1>/dev/null 2>/dev/null 是一个意思,但更加简洁)

注意:此处的顺序不能更改,否则达不到想要的效果,此时先将标准输出重定向到 /dev/null,然后将标准错误重定向到标准输出,由于标准输出已经重定向到了/dev/null,因此标准错误也会重定向到/dev/null,于是一切静悄悄:-)

如果进行后台启动服务

如果使用 java -jar xx.jar 这样是前端阻塞的,一旦ctrl + c 就会停止掉

如果使用 java -jar xx.jar & 这样是可以达到目的,但不够

nohup java -jar xx.jar & 嗯,这样会更好一些,

但nohup 会把输出自动写入 nohup.out 文件中,并且随着时间,nohup.out 文件会越来越大,这显然不是我们想看到的效果。咋办呢,这个时候,/dev/null 就可以登场了。

nohup java -jar xx.jar >/dev/null 2>&1 & (这样标准输出,错误输出都会被吞掉,静悄悄。当然,日志要根据log4j 等日志框架工具等输出到指定的文件目录,更容易管理)

如果想保留一些错误日志什么的,可以:
nohup java -jar xx.jar >/dev/null 2>error.log &

以上。