背景,Java& init脚本

时间:2013-12-05 14:49:07

标签: java bash shell init

我正在尝试为java程序编写一个init脚本。该程序无法自我背景,因此我正在使用&去做吧。它将其日志文件写入stdout。 我遇到的问题是关于init脚本中的RETVAL。这是我正在使用的功能:

JAR_FILE=/opt/application/server/server.jar
JAVA=/usr/bin/java
    start() {
        echo -n $"Starting ${NAME}: "
        daemon --pidfile=${PID_FILE} --user $USER \
            $JAVA $JAVA_ARGS >> /var/log/application/server.log &
        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && touch $LOCKFILE
        return $RETVAL
    }

当我运行init脚本时,应用程序启动或运行失败,问题是retval正在写入日志文件,而不是写入stdout:

[root@rpmbuild rpmbuild]# /etc/init.d/application-server start
Starting application-server:
[root@host]# tail /var/log/application/server.log
JAVA APPLICATION ERRORS ARE HERE
[FAILED]

无论如何我可以让它登录到stdout并确保任何retval(无论好坏)都会回显到stdout吗?

2 个答案:

答案 0 :(得分:1)

使用daemon命令

时,有如何指示输出的选项
 -l, --errlog=spec         - Send daemon's error output to syslog or file
 -b, --dbglog=spec         - Send daemon's debug output to syslog or file
 -o, --output=spec         - Send client's output to syslog or file
 -O, --stdout=spec         - Send client's stdout to syslog or file
 -E, --stderr=spec         - Send client's stderr to syslog or file

我会使用-o选项更改输出而不是重定向。你不应该以任务为背景

daemon -o /var/log/application/server.log -name SuperJavaProgram \
--pidfile=${PID_FILE} --user $USER $JAVA $JAVA_ARGS

然后你可以测试它是否与daemon --running -n SuperJavaProgram

一起运行

答案 1 :(得分:0)

也许,您可以在java中打印到stderr,以分隔标准日志和错误。您的>>将仅重定向标准输出。

顺便说一句,测试$?令人惊讶,而你的程序尚未执行,因为后台编辑。