2015-09-18 38 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'来访问文件 –

相关问题