【问题标题】:Backgrounding, Java & init script后台、Java 和初始化脚本
【发布时间】:2013-12-05 14:49:07
【问题描述】:

我正在尝试为 java 程序编写一个初始化脚本。该程序无法自行设置背景,因此我正在使用 & 来执行此操作。它将其日志文件写入标准输出。 我遇到的问题是关于初始化脚本中的 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
    }

当我运行初始化脚本时,应用程序启动或失败,问题是 retval 被写入日志文件,而不是标准输出:

[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]

无论如何我可以让它记录到标准输出并确保任何 retval(无论是好还是坏)都被回显到标准输出?

【问题讨论】:

    标签: java bash shell init


    【解决方案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测试它是否运行

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-29
        • 1970-01-01
        • 1970-01-01
        • 2010-12-26
        • 2011-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多