前言: 暫無html
零:java -h
和不少linux命令同樣,咱們第一步先經過「java -h」命令查看java命令的使用語法,其輸出以下java
[root@wxapp203 basesoft]# java -h Usage: java [-options] class [args...] (to execute a class) or java [-options] -jar jarfile [args...] (to execute a jar file) where options include: -d32 use a 32-bit data model if available -d64 use a 64-bit data model if available -server to select the "server" VM The default VM is server, because you are running on a server-class machine. -cp <class search path of directories and zip/jar files> -classpath <class search path of directories and zip/jar files> A : separated list of directories, JAR archives, and ZIP archives to search for class files. -D<name>=<value> set a system property -verbose:[class|gc|jni] enable verbose output -version print product version and exit
有圖咱們可知java有兩種格式(對應兩種功能)的使用方法,linux
功能一:執行一個class文件spring
功能二:執行一個jar文件shell
一:java [-options] -jar jarfile [args...]
可選參數[-options] : 沒使用過,但其介紹可猜想 服務器
必選參數 -jar :指定該命令是運行的是個jar或war文件oracle
必選參數 **jarfile :指定運行的文件app
可選參數[args.....] : 用過一個就是‘&’指定該jar文件後臺掛起,下面介紹。this
備註:可執行spring boot的war包項目spa
二:不指定任何參數運行jar文件
java -jar ***jarFile
該使用方式,當退出控制檯jar項目也會退出(大多數狀況都不實用)
三:經過在***jarFile文件後指定參數「&」
java -jar ***jarFile &
該方式啓動jar項目,當退出通知臺該jar項目也會一直運行,可解決二的問題(以前我也是這樣啓動的),但後來發現,即便我退出了控制檯,項目裏面打印的日誌文件會輸出到當前控制檯(即兩個控制檯不是一個)。後經分析可知,該命令沒有指定該進程的輸出流到哪裏,默認輸出流(和項目裏的日誌輸出不同,即便輸出的東西是同樣的)是當前控制檯。因此要解決該問題就要解決指定該輸出流到哪裏?故可參考以下命令
四:指定該項目(進程)的輸出流
java -jar ***jarFile > ./test.log &
可選參數:> ./test.log (注意中間空格) 指定進程(項目)的輸出了到當前目錄下的test.log文件
備註>該參數只指定了標準輸出流,並無指定標準錯誤輸出
可選參數:’&’ 後臺掛起
五 :標準使用方式
爲保險起見咱們也能夠把標準錯誤輸出流寫到文件中去(也就是說若是上面進程出現錯誤了,仍是會把錯誤信息輸出到當前控制檯的),
java -jar ***jarFile > ./test.log 2>&1 &
備註:2>&1 >2表明標準錯誤輸出流 1表明標準輸出流 &是合併的意思。0表明輸入流
備註:由於咱們已經在項目中有輸出日誌(也就是說上面的命令會輸出兩個同樣的日誌內容 一個是項目中打印的日誌(由你的項目決定),一個就是該命令產生的日誌test.log(有服務器系統決定)),爲節省資源咱們能夠忽略服務器系統打印的日誌。故咱們可使用以下命令
java -jar ***jarFile > /dev/null 2>&1 &
備註:該命令把輸出全部輸出流輸出到文件/dev/null下,該文件是系統設計的,即輸入到該文件的東西當即被拋棄不會產生多餘資源(便可變相實現不輸出的效果)
六:附加 nohup (短語:後臺運行)
查看該語法使用 nohup --help
[root@wxapp203 basesoft]# nohup --help Usage: nohup COMMAND [ARG]... or: nohup OPTION Run COMMAND, ignoring hangup signals. --help display this help and exit --version output version information and exit If standard input is a terminal, redirect it from /dev/null. //標準輸入流 重定向到 /dev/null If standard output is a terminal, append output to `nohup.out' if possible, //即沒有指定輸出流是,默認追加到當前目錄下的nohup.out(無需本身建立)文件中。 `$HOME/nohup.out' otherwise. If standard error is a terminal, redirect it to standard output. //標準錯誤輸出流,重定向到輸出流中,即2>&1
To save output to FILE, use `nohup COMMAND > FILE'. //也能夠指定輸出流到文件 NOTE: your shell may have its own version of nohup, which usually supersedes the version described here. Please refer to your shell's documentation for details about the options it supports.
故:咱們可使用 nohup java -jar ***jarFile > /dev/null & 來替代標準五的使用
例如
$ nohup java -jar fwh_biz-0.0.1-SNAPSHOT.war > /dev/null & //使用命令 [2] 10112 //返回進程id nohup: ignoring input and redirecting stderr to stdout //提示咱們 忽略了輸入流 而且把標準錯誤輸出流,重定向到輸出流中了,而咱們把輸出流重定向到/dev/null中,故什麼都不會輸出
[1] Killed nohup java -jar fwh_biz-0.0.1-SNAPSHOT.war
備註:這樣看來nohup的功能就是包裝(從效果上看它包裝了流的走向和一個提示功能)了咱們以前的命令.
參考資料:1.http://www.javashuo.com/article/p-stwsseoo-mo.html (博客)
2. http://www.runoob.com/linux/linux-shell-io-redirections.html(shell教程)
3.https://docs.oracle.com/javase/1.5.0/docs/tooldocs/solaris/java.html (官方文檔)