- nohup:no hung up 的缩写,意思是不挂断,主要作用就是可以在后台运行,并可以选择将日志输出到指定文件。在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前工作目录下,如果当前工作目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。
- >:重定向
- & :在后台运行
文件描述符(File Descriptor),用一个数字(通常为0-9)来表示一个文件。
文件描述符 | 名称 | 常用缩写 | 说明 |
0 | 标准输入 | stdin | 键盘,用户键盘输入的内容 |
1 | 标准输出 | stdout | 屏幕,输出到显示屏的内容 |
2 | 标准错误 | stderr | 屏幕,输出到显示屏的内容 |
>表示将命令的【标准输出】重定向到指定的文件中
1>表示将命令的【标准输出】重定向到指定的文件中
2>表示将命令的【标准错误】重定向到指定的文件中
2>&1表示将命令的【标准错误】重定向到【标准输出】中
>、>>、1>、1>> 都是表示【标准输出】
--------------------------------------------------------------------------------------------------------------------------------
命令实例:
进入工作目录 /export/server/jar,查看目录内容
cd /export/server/jar
ls
运行命令1:
nohup java -jar test.jar &
在后台不挂断运行 jar 包,默认在当前工作目录输出默认的日志文件 nohup.out
--------------------------------------------------------------------------------------------------------------------------------
运行命令2:
nohup java -jar test.jar > output.log &
在后台不挂断运行 jar 包,默认在当前工作目录输出指定的日志文件 output.log
--------------------------------------------------------------------------------------------------------------------------------
运行命令3:
nohup java -jar test.jar 2> error.log &
在后台不挂断运行 jar 包,默认在当前工作目录输出标准错误(报错内容)到指定的日志文件error.log
--------------------------------------------------------------------------------------------------------------------------------
运行命令4:
nohup java -jar test.jar 1> test.log 2> test-error.log &
在后台不挂断运行 jar 包,在当前工作目录,将标准日志输出到指定的日志文件 test.log,将错误日志输出到指定的日志文件 test-error.log
--------------------------------------------------------------------------------------------------------------------------------
运行命令5:
nohup java -jar test.jar 1> testall.log 2>&1 &
等同于
nohup java -jar test.jar > testall.log 2>&1 &
在后台不挂断运行 jar 包,在当前工作目录,将标准日志输出到指定的日志文件 testall.log,将错误日志输出到指定的日志文件 testall.log,2>&1表示将命令的【标准错误】重定向到【标准输出】中。
--------------------------------------------------------------------------------------------------------------------------------
运行命令6:使用绝对路径,可以在任意工作目录去执行
nohup java -jar /export/server/jar/test.jar > /export/server/jar/testlog.log 2>&1 &
在后台不挂断运行 /export/server/jar/test.jar 包,在 /export/server/jar 目录,将标准日志和错误日志都输出到指定的日志文件 testlog.log,2>&1表示将命令的【标准错误】重定向到【标准输出】中。
--------------------------------------------------------------------------------------------------------------------------------
运行命令7:不输出标准输出日志
nohup java -jar /export/server/jar/test.jar > /dev/null &
在后台不挂断运行 /export/server/jar/test.jar 包,不输出标准输出日志。/dev/null 表示空设备文件。
--------------------------------------------------------------------------------------------------------------------------------
运行命令8:不输出任何日志
nohup java -jar /export/server/jar/test.jar > /dev/null 2>&1 &
在后台不挂断运行 /export/server/jar/test.jar 包,不输出任何日志。/dev/null 表示空设备文件。这里也可以理解为将标准输出日志和标准错误日志都输出到空设备文件,即是不输出日志。
--------------------------------------------------------------------------------------------------------------------------------
运行命令9:只输出标准错误(报错内容)
nohup java -jar /export/server/jar/test.jar > /dev/null 2> testonlyerr.log &
在后台不挂断运行 /export/server/jar/test.jar 包,只输出标准错误(报错内容)日志。/dev/null 表示空设备文件。这里 > /dev/null 意思是将标准输出到空设备文件,即是不输出标准输出。
--------------------------------------------------------------------------------------------------------------------------------
摸索 >、1>、1 >、2>&1、2>& 1、2 >&1 的区别
命令执行输出记录:
[root@localhost jar]# java -jar test.jar > testall.log 2>&1 &
[1] 37689
[root@localhost jar]# ps -ef | grep jar
root 37689 110663 29 21:06 pts/0 00:00:24 java -jar test.jar
root 39255 110663 0 21:07 pts/0 00:00:00 grep --color=auto jar
[root@localhost jar]#
[root@localhost jar]# java -jar test.jar > testall.log 2>& 1 &
[1] 41011
[root@localhost jar]# ps -ef | grep jar
root 41011 110663 37 21:09 pts/0 00:00:26 java -jar test.jar
root 42346 110663 0 21:10 pts/0 00:00:00 grep --color=auto jar
[root@localhost jar]#
[root@localhost jar]# java -jar test.jar 1> testall.log 2>&1 &
[1] 14097
[root@localhost jar]# ps -ef | grep jar
root 14097 110663 46 20:46 pts/0 00:00:24 java -jar test.jar
root 15080 110663 0 20:47 pts/0 00:00:00 grep --color=auto jar
[root@localhost jar]#
[root@localhost jar]# java -jar test.jar 1> testall.log 2>& 1 &
[1] 18053
[root@localhost jar]# ps -ef | grep jar
root 18053 110663 33 20:49 pts/0 00:00:23 java -jar test.jar
root 19388 110663 0 20:50 pts/0 00:00:00 grep --color=auto jar
[root@localhost jar]#
[root@localhost jar]# java -jar test.jar 1> testall.log 2 >& 1 &
[1] 21253
[root@localhost jar]# ps -ef | grep jar
root 21253 110663 56 20:52 pts/0 00:00:26 java -jar test.jar 2
root 22087 110663 0 20:53 pts/0 00:00:00 grep --color=auto jar
[root@localhost jar]#
[root@localhost jar]# java -jar test.jar 1 > testall.log 2 >& 1 &
[1] 24094
[root@localhost jar]# ps -ef | grep jar
root 24094 110663 36 20:54 pts/0 00:00:26 java -jar test.jar 1 2
root 25468 110663 0 20:56 pts/0 00:00:00 grep --color=auto jar
[root@localhost jar]#
[root@localhost jar]# java -jar test.jar 1 > testall.log 2>&1 &
[1] 33853
[root@localhost jar]# ps -ef | grep jar
root 33853 110663 52 21:03 pts/0 00:00:25 java -jar test.jar 1
root 34736 110663 0 21:03 pts/0 00:00:00 grep --color=auto jar
[root@localhost jar]#
推断:
1、> 等同 1>,意思是将【标准输出】重定向到指定的文件中,不等同 1 >(中间有空格)
2、2>&1表示将命令的【标准错误】重定向到【标准输出】中,其中 > 的左右不能有空格,1前面可以有空格,也就是 2>&1,也可以写成 2>& 1,平常都是写成一个整体 2>&1
以下这四条命令执行效果相同
java -jar test.jar > testall.log 2>&1 &
java -jar test.jar > testall.log 2>& 1 &
java -jar test.jar 1> testall.log 2>&1 &
java -jar test.jar 1> testall.log 2>& 1 &
--------------------------------------------------------------------------------------------------------------------------------
清空进程/服务日志
【千万别直接删除日志文件!!!】
【会造成服务无法输出日志,服务异常直接停止运行!!!】
【造成严重生产事故!!!】
在进程/服务不停止的情况下,日志会一直增长,日志文件会越来越大,怎么办呢?
第一种方法:
清空之前,检查日志大小
cat /dev/null > 日志文件路径
第二种方法:
清空之前,检查日志大小
cp /dev/null 日志文件路径