java -jar 与nohup的区别

一、

Linux shell - `dirname $0` 定位到运行脚本的相对位置


在命令行状态下单纯执行 $ cd `dirname $0` 是毫无意义的。因为他返回当前路径的"."。

这个命令写在脚本文件里才有作用,他返回这个脚本文件放置的目录,并可以根据这个目录来定位所要运行程序的相对位置(绝对位置除外)。
在/home/admin/test/下新建test.sh内容如下:
cd `dirname $0`
echo `pwd`
然后返回到/home/admin/执行
sh test/test.sh
运行结果:
/home/admin/test
这样就可以知道一些和脚本一起部署的文件的位置了,只要知道相对位置就可以根据这个目录来定位,而可以不用关心绝对位置。这样脚本的可移植性就提高了,扔到任何一台服务器,(如果是部署脚本)都可以执行

二、

问题:

经常在shell脚本中,看到有"2>&1"字样的写法,到底这是什么意思呢?

解决办法:

1。这里的1和2指的是文件描述符。

0:stdin

1:stdout

2:stderr


2。 ">"则是重定向符号。

“2>&1”的意思是:将输出到标准出错处理的信息,发送到标准输出中。


3。“2>&1”的记忆:

如果只有“2>1”,看起来像是将文件2的内容重定向到1文件中去了,加上"&",则表示“&”之后跟着的数字是文件描述符。


java -jar 与nohup的区别

经常会遇到这样一个问题,打个jar包,测试或者上线生产,于是乎面临的选择来了,java –jar or nohup?

 

下面我来扒一扒:

一、    java -jar a.jar &


直接启动jar文件,在当前会话进程中开启一个子进程来运行程序,这个子进程会随着会话进程的结束而结束。


这种情况适合短时间测试用。


二、     nohup java -jar a.jar&


先交代一下名词:


hangup (挂断)终端退出时会发送 hangup 信号来通知其关闭所有子进程。


nohup(不挂断,忽略挂断信号)


nohup 的使用是十分方便的,只需在要处理的命令前加上 nohup 即可,标准输出和标准错误缺省会被重定向到 nohup.out 文件中。一般我们可在结尾加上"&"来将命令同时


放入后台运行,也可用">filename2>&1"来更改缺省的重定向文件名。


这种情况适合在生产环境长时间运行。

---------------------------------------------------------------------------------------------------

Linux 运行jar包命令如下:

方式一:

 
  1. java -jar XXX.jar

特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出

那如何让窗口不锁定?

方式二

 
  1. java -jar XXX.jar &

&代表在后台运行。

特定:当前ssh窗口不被锁定,但是当窗口关闭时,程序中止运行。

继续改进,如何让窗口关闭时,程序仍然运行?

方式三

nohup java -jar XXX.jar &

nohup 意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行

当用 nohup 命令执行作业时,缺省情况下该作业的所有输出被重定向到nohup.out的文件中,除非另外指定了输出文件。

方式四

 
  1. nohup java -jar XXX.jar >temp.txt &

解释下 >temp.txt

command >out.file

command >out.file是将command的输出重定向到out.file文件,即输出内容不打印到屏幕上,而是输出到out.file文件中。

可通过jobs命令查看后台运行任务

 
  1. jobs

那么就会列出所有后台执行的作业,并且每个作业前面都有个编号。
如果想将某个作业调回前台控制,只需要 fg + 编号即可。

 
  1. fg 23

查看某端口占用的线程的pid

netstat -nlp |grep :9181







猜你喜欢

转载自blog.csdn.net/superhoy/article/details/78214023