编写 Java 程序启动脚本最佳实践
在实际的工作中经常会遇到给 java 项目编写启动脚本,现在就来记录一下编写此类脚本的最佳实践。先上一个模板:
参数校验的最佳实践还没有仔细研究,有了一些实践后再做补充。下面解释一下脚本中的一些关键点。
nohup 是不挂断的意思( no hang up),用它启动进程会忽略所有的挂(SIGHUP)信号,比如用户退出终端进程不会结束
命令最后面的 &,表示后台运行,nohup 和 &结合使用就是让进程在后台运行且不挂断。
从上面模板可以看到启动进程时把标准输出重定向到文件"${script_prefix}"/start.out,那么 2>&1 又是什么呢?这里解释一下,在 shell 中标准输入和输出是这样表示的:0 – stdin (standard input),1 – stdout (standard output),2 – stderr (standard error) 。2>&1 就是把 stderr 重定向到 stdout,即 stdout 和 stderr 输出到同一个地方。
另外在上面模板中 start.out 所在目录是脚本所在的上下文环境,它是通过第 5、6 行代码生成的,${BASH_SOURCE-$0}变量表示脚本调用的路径,dirname "${BASH_SOURCE-$0}"即脚本所在目录,然后通过第 6 行代码生成脚本所在目录的全路径。下面我们给出第 5、6 行代码的测试例子。
有一个/home/test/目录下的脚本 test.sh:
如果执行脚本:
输出如下:
如果执行脚本:
输出如下:
你会发现调用脚本的路径不同,${BASH_SOURCE-$0}变量的值也不同,但最终输出的全路径是一致的,所以可以放心使用。
版权声明: 本文为 InfoQ 作者【WindFlying】的原创文章。
原文链接:【http://xie.infoq.cn/article/e84632ca8333981914d9f9161】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论