springboot項目不輸出nohup.out日志的解決

springboot不輸出nohup.out日志

nohup java -jar mgcr_pc-0.0.1-SNAPSHOT.war >/dev/null 2>log & 

註意:這個log是一個文件,可以隨意命名

ps aux|grep 你剛剛運行的包名.jar

然後會顯示線程id

關閉進程 如5555

kill -9 5555

nohup啟動程序後,nohup.out過大的解決

一般百度到都會說:

cp /dev/null nohup.out
cat /dev/null nohup.out

不能簡單的刪除那個文件,因為linux的文件管理是引用計數法。

可以清空nohup日志,其實關鍵在於啟動時的流輸入方式。如果使用>方式,使用上述方法操作後,再次寫入時,文件會重新變成原來的大小,而使用>>追加方式,確實可以消除文件的大小。

原因基本描述如下:

linux的文件管理使用fd,用戶可以自定義3以上(包括3)的文件,而0,1,2,則對應瞭3個標準流

  • 0=標準輸入流stdin
  • 1=標準輸出流stdout
  • 2=標準錯誤流stderr

shell讀取到>時,判斷文件是否存在,不存在則創建文件,之後以w方式寫入,文件指針隻會向後增加。

因此使用>作為nohup的重定向時,文件指針一直向後增加,使用上述兩個命令操作nohup.out,操作時確實重寫瞭整個文件,但是在程序的下次輸出時,文件的大小又重新變回原來的大小瞭,這很正常,因為文件的指針還在原來的大小的位置,寫入操作時,指針向後偏移“輸出內容的大小”,並寫入“輸出內容”,此時文件不得不重新回到原本的大小,雖然原本的內容已經不見瞭(此時那些內容的填充為0,類似的操作一次,然後查看nohup文件的16進制表示,就會發現它們全部都是0x00,可以稱為文件空洞)

而使用>>方式寫入文件時,使用a+方式寫入文件,文件指針指向文件的結束符EOF位置。

在使用使用上述兩個命令操作nohup.out時,文件的結束符確實重新回到瞭0x00地址,因此可以清空原本的內容,並且不會再創建文件空洞。

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: