首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >背景技术、Java和init脚本

背景技术、Java和init脚本
EN

Stack Overflow用户
提问于 2013-12-05 22:49:07
回答 2查看 356关注 0票数 0

我正在试着为一个java程序写一个初始化脚本。该程序没有能力对自身进行后台处理,所以我使用&来实现。它将其日志文件写入stdout。我遇到的问题是关于init脚本中的RETVAL。下面是我正在使用的函数:

代码语言:javascript
复制
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:

代码语言:javascript
复制
[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中?

EN

回答 2

Stack Overflow用户

发布于 2013-12-06 00:30:46

在使用daemon命令时,可以选择如何定向输出

代码语言:javascript
复制
 -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选项更改输出,而不是重定向。您也不应该对任务进行后台处理

代码语言:javascript
复制
daemon -o /var/log/application/server.log -name SuperJavaProgram \
--pidfile=${PID_FILE} --user $USER $JAVA $JAVA_ARGS

然后,您可以测试它是否与daemon --running -n SuperJavaProgram一起运行

票数 1
EN

Stack Overflow用户

发布于 2013-12-06 00:05:47

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

顺便说一句,测试$?是令人惊讶的,而你的程序还没有执行,因为它是后台开发的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20403066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档