nohup不輸出nohup.out日誌資訊,已解決。

桔子很甜發表於2020-10-13

最近專案中使用的springboot打的jar包,放到伺服器上跑,為了防止關閉終端視窗導致程式掛掉,採用nohup和&組合命令來操作

命令如下 :

nohup java -jar test.jar &
但是這種方式啟動專案會預設生成一個nohup.out的檔案來記錄日誌,而且這個檔案太佔磁碟記憶體了,幾天下來發現這個檔案大小有好幾個G,所以為了減少磁碟被大量消耗,決定啟動專案時不輸出nohup.out檔案。

解決方案如下:

只輸出錯誤資訊到日誌檔案

nohup java -jar yourProject.jar >/dev/null 2>log &

什麼資訊也不要

nohup java -jar yourProject.jar >/dev/null 2>&1 &
下面是幾個註解:

使用&後臺執行程式:

結果會輸出到終端

使用Ctrl + C傳送SIGINT訊號,程式免疫

關閉session傳送SIGHUP訊號,程式關閉

使用nohup執行程式:

結果預設會輸出到nohup.out

使用Ctrl + C傳送SIGINT訊號,程式關閉

關閉session傳送SIGHUP訊號,程式免疫

檔案描述符

當執行shell命令時,會預設開啟3個檔案,每個檔案有對應的檔案描述符來方便我們使用:

所以我們平時在執行shell命令中,都預設是從鍵盤獲得輸入,並且將結果輸出到控制檯上。但是我們可以通過更改檔案描述符預設的指向,從而實現輸入輸出的重定向。比如我們將1指向檔案,那麼標準的輸出就會輸出到檔案中。

輸出重定向

輸出重定向的使用方式很簡單,基本的一些命令如下:

  1. /dev/null

這條命令的作用是將標準輸出1重定向到/dev/null中。 /dev/null代表linux的空裝置檔案,所有往這個檔案裡面寫入的內容都會丟失,俗稱“黑洞”。那麼執行了>/dev/null之後,標準輸出就會不再存在,沒有任何地方能夠找到輸出的內容。

  1. 2>&1

這條命令用到了重定向繫結,採用&可以將兩個輸出繫結在一起。這條命令的作用是錯誤輸出將和標準輸出同用一個檔案描述符,說人話就是錯誤輸出將會和標準輸出輸出到同一個地方。

linux在執行shell命令之前,就會確定好所有的輸入輸出位置,並且從左到右依次執行重定向的命令,所以>/dev/null 2>&1的作用就是讓標準輸出重定向到/dev/null中(丟棄標準輸出),然後錯誤輸出由於重用了標準輸出的描述符,所以錯誤輸出也被定向到了/dev/null中,錯誤輸出同樣也被丟棄了。執行了這條命令之後,該條shell命令將不會輸出任何資訊到控制檯,也不會有任何資訊輸出到檔案中。

相關文章