【发布时间】: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,用于将控制台的输出重定向到这个地方。此外,除了一些使用这些输出的第三方组件外,我没有任何东西要发送到 stderr 或 stdout。我自己使用 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