【问题标题】:Java "java.util.logging.Logger" does not work when running with nohup使用 nohup 运行时,Java“java.util.logging.Logger”不起作用
【发布时间】:2014-08-20 06:46:07
【问题描述】:

我创建了一个应该作为 ubuntu 服务运行的 Java 应用程序。我关注了这篇文章:Running a Java program as a daemon in Ubuntu Linux 这是我在/etc/init.d/ 目录中的脚本:

#!/bin/sh
### BEGIN INIT INFO
# Provides:          myservice
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# X-Interactive:     true
# Short-Description: Start/stop myservice
### END INIT INFO

case $1 in
    status)
        if [ -f /opt/myservice/pid ]; then
            PID=$(cat /opt/myservice/pid);
            echo "myservice is running. PID="$PID
        else
            echo "myservice is not running."
        fi
    ;;
    start)
        if [ ! -f /opt/myservice/pid ]; then
            nohup java -jar /opt/myservice/billing_consumer.jar /opt/myservice 2>> /dev/null >> /dev/null &
            echo $! > /opt/myservice/pid
            echo "myservice started ..."
        else
            echo "myservice is already running ..."
        fi
    ;;
    stop)
        if [ -f /opt/myservice/pid ]; then
            PID=$(cat /opt/myservice/pid);
            kill $PID;
            echo "myservice stopped ..."
            rm /opt/myservice/pid
        else
            echo "myservice is not running ..."
        fi
    ;;
    restart)
        if [ -f /opt/myservice/pid ]; then
            PID=$(cat /opt/myservice/pid);
            echo "Stopping myservice ...";
            kill $PID;
            echo "myservice stopped ...";
            rm /opt/myservice/pid

            echo "Starting myservice ..."
            nohup java -jar /opt/myservice/billing_consumer.jar /opt/myservice 2>> /dev/null >> /dev/null &
            echo $! > /opt/myservice/pid
            echo "myservice started ..."
        else
            echo "myservice is not running ..."
        fi
    ;;
esac

这个脚本似乎关闭了billing_consumer.jar标准输入,并将输出重定向到/dev/null;其中,我在某处读到它是bitbucket,用于将控制台的输出重定向到这个地方。此外,除了一些使用这些输出的第三方组件外,我没有任何东西要发送到 stderrstdout。我自己使用 java 的内置日志 API (java.util.logging.Logger) 来记录信息。我使用java.util.logging.FileHandler 作为记录输出的处理程序。但问题是,当我将程序作为服务运行时,日志记录不起作用。但是当我手动运行程序时,我可以看到文件中写入的日志。这是我用于记录配置的logging.properties 文件:

handlers = java.util.logging.FileHandler
config  = 

java.util.logging.FileHandler.level     = ALL
java.util.logging.FileHandler.filter    =
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
java.util.logging.FileHandler.encoding  =
java.util.logging.FileHandler.limit     = 1048576
java.util.logging.FileHandler.count     = 20
java.util.logging.FileHandler.append    = true
java.util.logging.FileHandler.pattern   = logs/billing-log.%u.%g.log

...

我认为这与/etc/init.d/myservice 脚本没有任何关系,因为我将其更改为将输出也重定向到文件,并且我可以看到第三方组件的输出已写入文件中。虽然,我没有写终端的输出。谁能弄清楚这里有什么问题。我是否以错误的方式配置了日志记录?

【问题讨论】:

    标签: java linux ubuntu nohup java.util.logging


    【解决方案1】:

    在您的日志记录属性中,您使用的是relative path。当您将其作为服务运行时,当前/工作目录可能与您手动运行时不同。 FileHandler 将无法创建新的日志文件if the directory path doesn't exist。设置工作目录或将路径改为绝对路径。

    'config =' 行看起来不对,因为没有值。

    如果这不起作用,您应该修改脚本以将输出/错误流传输到文件以调试正在发生的事情。

    【讨论】:

    • 哦,我不知道这个。谢谢,问题解决了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多