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。
推薦閱讀:
- SpringBoot項目部署到服務器上的方法(Jar包)
- php萬字碼出完美守護進程詳解
- Spring Boot Jar 包部署腳本的實例講解
- Spring Boot 啟動、停止、重啟、狀態腳本
- springboot項目部署在linux上運行的兩種方式小結