在使用 nohup
命令運行進程時,默認情況下,啟動參數不會直接記錄在生成的 nohup.out
日志文件中。如果你希望將進程的啟動參數也記錄下來,可以采用以下幾種方法:
在執行 nohup
命令的同時,使用 echo
將參數輸出到 nohup.out
文件中。例如:
nohup your_command --param1 value1 --param2 value2 >> nohup.out 2>&1 &
echo "Started your_command with parameters: --param1 value1 --param2 value2" >> nohup.out
解釋:
your_command --param1 value1 --param2 value2
是你想要運行的命令及其參數。>> nohup.out
將標準輸出追加到 nohup.out
文件中。2>&1
將標準錯誤重定向到標準輸出,確保錯誤信息也記錄在 nohup.out
中。echo
命令將啟動參數手動寫入 nohup.out
。創建一個 shell 腳本來自動記錄參數并執行命令。例如,創建一個名為 run_with_log.sh
的腳本:
#!/bin/bash
# 記錄開始時間和參數
echo "Starting at $(date)" >> nohup.out
echo "Command: $0 $@" >> nohup.out
# 執行實際命令
exec "$@"
然后給腳本賦予執行權限并使用 nohup
運行:
chmod +x run_with_log.sh
nohup ./run_with_log.sh your_command --param1 value1 --param2 value2 &
解釋:
exec "$@"
替換當前的 shell 進程來執行傳入的命令,這樣日志記錄和命令執行在同一個進程中,避免子進程的問題。如果參數較多或復雜,可以考慮通過環境變量傳遞參數,并在腳本中讀取這些變量進行記錄。例如:
PARAM1="value1"
PARAM2="value2"
nohup your_command --param1 "$PARAM1" --param2 "$PARAM2" >> nohup.out 2>&1 &
echo "Started your_command with PARAM1=$PARAM1 and PARAM2=$PARAM2" >> nohup.out
tee
命令實時記錄如果你希望在終端和日志文件中同時查看輸出,可以使用 tee
命令:
nohup your_command --param1 value1 --param2 value2 | tee nohup.out
不過,這種方法不會記錄命令本身,只記錄命令的輸出。
最直接且靈活的方法是方法一,即在啟動命令的同時手動將參數寫入日志文件。這確保了無論命令如何變化,參數都能被準確記錄。根據實際需求選擇合適的方法,以確保日志的完整性和可讀性。
示例:
假設你有一個名為 app
的應用程序,使用以下命令啟動并記錄參數:
nohup ./app --mode production --port 8080 >> app.log 2>&1 &
echo "Started app with parameters: --mode production --port 8080" >> app.log
這樣,app.log
文件中將包含類似如下的內容:
Starting at Thu Apr 26 12:34:56 UTC 2024
Command: ./app --mode production --port 8080
[應用程序的標準輸出和錯誤信息]
通過這種方式,你可以方便地追蹤進程的啟動參數及其運行狀態。