nohup 指令無法將輸出印到 nohup.out

nohup 指令無法將輸出印到 nohup.out

我編寫了一個 bash 腳本來在 ubuntu 或 Red Hat 環境中執行我的 jar 檔案。這是我的 bash 腳本

#!/bin/bash
JAVA_HOME=/usr/lib/java/jdk1.8.0_131
$nohup java -jar /home/chikin/Downloads/hardcoded.jar & tail -f nohup.out


我的bash腳本將執行我開發的jar,我希望將jar檔案的輸出列印到nohup.out或任何txt檔案中,這樣我可以輕鬆地找出任何問題,但當我執行腳本時似乎沒有列印任何內容,它會列印出終端中的所有輸出。但是當我 nohup java -jar /home/chikin/Downloads/hardcoded.jar &直接從終端執行時,它能夠將所有 jar 輸出列印到 nohup.out 中。我可以知道為什麼我的腳本不起作用嗎?我的腳本也無法在每次重新啟動 ubuntu 機器時觸發,我測試了許多解決方案,但沒有一個能正常工作

答案1

除非您已將 的值匯出nohup到腳本的環境中(例如export nohup=/usr/bin/nohup),否則$nohup將計算為空字串 - 因此您的命令

$nohup java -jar /home/chikin/Downloads/hardcoded.jar

變得平淡

java -jar /home/chikin/Downloads/hardcoded.jar

所以nohup根本沒有被調用。你可能想要

nohup java -jar /home/chikin/Downloads/hardcoded.jar & tail -f nohup.out

(沒有$)。


也許最好讓輸出文件明確:

nohup java -jar /home/chikin/Downloads/hardcoded.jar > nohup.out & tail -f nohup.out

因為如線上說明頁所述,輸出檔案的規則取決於標準輸出是否為終端:

If standard output is a terminal, append output to 'nohup.out' if  pos‐
sible,  '$HOME/nohup.out'  otherwise.  If standard error is a terminal,
redirect it to standard output.  To save output  to  FILE,  use  'nohup
COMMAND > FILE'.

相關內容