2015-09-18 40 views
2

我發現了一個可用於我的jar文件的腳本。 我的問題是我如何修改它以記錄標準輸出和標準錯誤文件。將java jar stdout&stderr記錄到linux中的文件中

據我所知,這行應該進行修改:

nohup java -jar $PATH_TO_JAR /tmp 2>> /dev/null >> /dev/null & 

是什麼「/ tmp目錄」說明什麼?/dev/null意味着它不是指向任何地方?

這裏是我使用的腳本:

#!/bin/sh 
SERVICE_NAME=MyService 
PATH_TO_JAR=/usr/local/MyProject/MyJar.jar 
PID_PATH_NAME=/tmp/MyService-pid 
case $1 in 
    start) 
     echo "Starting $SERVICE_NAME ..." 
     if [ ! -f $PID_PATH_NAME ]; then 
      nohup java -jar $PATH_TO_JAR /tmp 2>> /dev/null >> /dev/null & 
         echo $! > $PID_PATH_NAME 
      echo "$SERVICE_NAME started ..." 
     else 
      echo "$SERVICE_NAME is already running ..." 
     fi 
    ;; 
    stop) 
     if [ -f $PID_PATH_NAME ]; then 
      PID=$(cat $PID_PATH_NAME); 
      echo "$SERVICE_NAME stoping ..." 
      kill $PID; 
      echo "$SERVICE_NAME stopped ..." 
      rm $PID_PATH_NAME 
     else 
      echo "$SERVICE_NAME is not running ..." 
     fi 
    ;; 
    restart) 
     if [ -f $PID_PATH_NAME ]; then 
      PID=$(cat $PID_PATH_NAME); 
      echo "$SERVICE_NAME stopping ..."; 
      kill $PID; 
      echo "$SERVICE_NAME stopped ..."; 
      rm $PID_PATH_NAME 
      echo "$SERVICE_NAME starting ..." 
      nohup java -jar $PATH_TO_JAR /tmp 2>> /dev/null >> /dev/null & 
         echo $! > $PID_PATH_NAME 
      echo "$SERVICE_NAME started ..." 
     else 
      echo "$SERVICE_NAME is not running ..." 
     fi 
    ;; 
esac 

我想一切都記錄到/var/log/myservice.log文件。 任何幫助表示讚賞!

+0

這是一個關於如何使用基本命令行的問題。在你知道如何使用你的shell之前,你需要多長時間使用計算機?我想知道如何使用你的shell。 –

回答

1

我發現這個解決方案:

nohup java -jar $PATH_TO_JAR > /var/log/myservice.log 2>&1 & 

當我刪除的日誌文件,而servce正在運行它並沒有創建一個新的altough它被分流到標準輸出。

+2

一些評論:1)2>&1表示需要stderr(這是第二個流)並將其重定向到stdout(這是第一個)2)您可能需要執行>>而不是>來重定向輸出(>將覆蓋所有存在的日誌文件; >>將會追加;不確定您的用例是合適的)。 3)讓系統刪除舊的日誌文件並創建一個新的日誌文件絕對是一個單獨的問題) – Foon

+0

從目錄中刪除文件時,實際上並未從磁盤中刪除它。任何打開文件的程序都可以使用它。如果該文件存在於任何其他目錄中,它將繼續這樣做。順便說一句,你仍然可以通過查看'/ proc/{pid}/fd/1'來訪問文件 –

相關問題