我正在试着为一个java程序写一个初始化脚本。该程序没有能力对自身进行后台处理,所以我使用&来实现。它将其日志文件写入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中?
发布于 2013-12-06 00:30:46
在使用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一起运行
发布于 2013-12-06 00:05:47
也许,您可以打印到java中的stderr,以分离标准日志和错误。您的>>将仅重定向标准输出。
顺便说一句,测试$?是令人惊讶的,而你的程序还没有执行,因为它是后台开发的。
https://stackoverflow.com/questions/20403066
复制相似问题