Linux后台运行jar包,nohup、>、&

打印 上一主题 下一主题

主题 994|帖子 994|积分 2982


  • 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,查察目次内容
  1. cd /export/server/jar
复制代码
  1. ls
复制代码

运行命令1: 
  1. nohup java -jar test.jar &
复制代码

在后台不挂断运行 jar 包,默认在当前工作目次输出默认的日志文件 nohup.out
--------------------------------------------------------------------------------------------------------------------------------
运行命令2:
  1. nohup java -jar test.jar > output.log &
复制代码

在后台不挂断运行 jar 包,默认在当前工作目次输出指定的日志文件 output.log
--------------------------------------------------------------------------------------------------------------------------------
运行命令3:
  1. nohup java -jar test.jar 2> error.log &
复制代码

在后台不挂断运行 jar 包,默认在当前工作目次输出尺度错误(报错内容)到指定的日志文件error.log
--------------------------------------------------------------------------------------------------------------------------------
运行命令4:
  1. nohup java -jar test.jar 1> test.log 2> test-error.log &
复制代码

在后台不挂断运行 jar 包,在当前工作目次,将尺度日志输出到指定的日志文件 test.log,将错误日志输出到指定的日志文件 test-error.log
--------------------------------------------------------------------------------------------------------------------------------
运行命令5:
  1. nohup java -jar test.jar 1> testall.log 2>&1 &
复制代码
等同于
  1. nohup java -jar test.jar > testall.log 2>&1 &
复制代码

在后台不挂断运行 jar 包,在当前工作目次,将尺度日志输出到指定的日志文件 testall.log,将错误日志输出到指定的日志文件 testall.log,2>&1表现将命令的【尺度错误】重定向到【尺度输出】中。
--------------------------------------------------------------------------------------------------------------------------------
运行命令6:使用绝对路径,可以在任意工作目次去执行
  1. 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:不输出尺度输出日志
  1. nohup java -jar /export/server/jar/test.jar > /dev/null &
复制代码

在后台不挂断运行 /export/server/jar/test.jar 包,不输出尺度输出日志。/dev/null 表现空设备文件。
--------------------------------------------------------------------------------------------------------------------------------
运行命令8:不输出任何日志
  1. nohup java -jar /export/server/jar/test.jar > /dev/null 2>&1 &
复制代码

在后台不挂断运行 /export/server/jar/test.jar 包,不输出任何日志。/dev/null 表现空设备文件。这里也可以理解为将尺度输出日志和尺度错误日志都输出到空设备文件,即是不输出日志。
--------------------------------------------------------------------------------------------------------------------------------
运行命令9:只输出尺度错误(报错内容) 
  1. nohup java -jar /export/server/jar/test.jar > /dev/null 2> testonlyerr.log &
复制代码

在后台不挂断运行 /export/server/jar/test.jar 包,只输出尺度错误(报错内容)日志。/dev/null 表现空设备文件。这里 > /dev/null 意思是将尺度输出到空设备文件,即是不输出尺度输出。
--------------------------------------------------------------------------------------------------------------------------------
运行命令10:>> 表现以文件追加的方式将输出重定向到指定文件
  1. nohup java -jar /export/server/jar/test.jar >> /export/server/jar/test10.log 2>&1 &
复制代码

 在后台不挂断运行 /export/server/jar/test.jar 包,在 /export/server/jar 目次,将尺度日志和错误日志都输出到指定的日志文件 test10.log,2>&1表现将命令的【尺度错误】重定向到【尺度输出】中。>> 表现以文件追加的方式将输出重定向到指定文件,> 表现以文件新建的方式将输出重定向到指定文件。
 --------------------------------------------------------------------------------------------------------------------------------
摸索 >、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、>> 等同 1>>,意思是将【尺度输出】以文件追加的方式重定向到指定的文件中
3、2>&1表现将命令的【尺度错误】重定向到【尺度输出】中,其中 > 的左右不能有空格,1前面可以有空格,也就是 2>&1,也可以写成 2>& 1,平常都是写成一个团体 2>&1
以下这四条命令执行结果相同
  1. java -jar test.jar > testall.log 2>&1 &
  2. java -jar test.jar > testall.log 2>& 1 &
  3. java -jar test.jar 1> testall.log 2>&1 &
  4. java -jar test.jar 1> testall.log 2>& 1 &
复制代码
--------------------------------------------------------------------------------------------------------------------------------
清空进程/服务日志
【万万别直接删除日志文件!!!】
【会造成服务无法输出日志,服务异常直接停止运行!!!】
【造成严峻生产事故!!!】
在进程/服务不停止的情况下,日志会不停增长,日志文件会越来越大,怎么办呢?
【关键点:使用  /dev/null 空设备文件】
第一种方法:
清空之前,查抄日志大小

  1. cat /dev/null > 日志文件路径
复制代码

第二种方法:
清空之前,查抄日志大小

  1. cp /dev/null 日志文件路径
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

知者何南

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表