背景,Java&;初始化脚本
我正在尝试为java程序编写一个init脚本。这个程序本身没有后台功能,所以我用&来做。它将日志文件写入标准输出。 我遇到的问题是关于init脚本中的RETVAL。下面是我正在使用的函数:背景,Java&;初始化脚本,java,bash,shell,init,Java,Bash,Shell,Init,我正在尝试为java程序编写一个init脚本。这个程序本身没有后台功能,所以我用&来做。它将日志文件写入标准输出。 我遇到的问题是关于init脚本中的RETVAL。下面是我正在使用的函数: JAR_FILE=/opt/application/server/server.jar JAVA=/usr/bin/java start() { echo -n $"Starting ${NAME}: " daemon --pidfile=${PID_FILE} --u
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,并确保任何检索(无论是好的还是坏的)都会回显到stdout?也许,您可以打印到java中的stderr,以分离标准日志和错误。您的
>
将只重定向标准输出
顺便说一句,测试
$?
会让人惊讶,而您的程序还没有执行,因为background-ed.在使用守护进程
命令时,可以选择如何引导输出
-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
然后,您可以测试它是否正在运行守护进程--running-n SuperJavaProgram