我正在尝试为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吗?
答案 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
,以分隔标准日志和错误。您的>>
将仅重定向标准输出。
$?
令人惊讶,而你的程序尚未执行,因为后台编辑。