start-stop-daemon和Java程序

8
我很难在使用start-stop-daemon的init脚本中正常启动Java程序。我已经编写了init脚本,它似乎可以运行,但之后从未出现代表正在运行程序的进程。
以下是我init脚本的片段:
#! /bin/sh
#
#

DAEMON="/usr/bin/java"
DAEMON_ARGS="-server -cp <bunch of RMI arguments and classpath stuff> -jar <absolute path>/myprog.jar"

PIDFILE="/var/run/myprog.pid"

case "$1" in
start)
    echo -n "Starting myprog"
    start-stop-daemon --start --pidfile "$PIDFILE" --chuid "myuser" --verbose --background --make-pidfile --startas "$DAEMON" -- $DAEMON_ARGS
    echo "."
;;

当我尝试通过/etc/init.d启动它时,我收到以下消息:
/etc/init.d#/etc/init.d/myscript start
启动myprogStarting /usr/bin/java ...
分离以启动/usr/bin/java ... 完成。

之后,没有java解释器进程在执行myprog.jar。
我已经尝试过各种组合的--exec、--start,但结果基本相同。如果我能得到更多了解正在发生什么的可见性,我肯定可以解决这个问题,但我不确定如何做到这一点。
有什么建议吗?
(我在嵌入式ARM平台上运行Angstrom,因此Java服务包装器不是一个可行的选择,即我认为它不适用于ARM)
我被卡住了,任何建议都将不胜感激。
谢谢。

我应该指出,我的程序目前尚未实现守护进程接口。这是必须的吗? - ColonelPackage
2个回答

14

有两件事可以尝试,首先尝试删除--startas并改用--exec,如下所示:

start-stop-daemon --start --pidfile "$PIDFILE" --chuid "myuser" --verbose --background --make-pidfile --exec "$DAEMON" -- $DAEMON_ARGS

由于您正在使用--background,请尝试指定--chdir选项,否则工作目录将成为/

我最终在解决我的问题时偶然遇到了您的问题,而我的问题最后是通过--chdir解决的,我相信它也会解决您的问题。


这个编程故事中最令人沮丧的部分是,如果没有另行指定,start-stop-daemon 会吞噬所有程序输出。 - Ivan Balashov

-4

你正在寻找一种运行并能够监控它的方式吗?

你尝试过微软批处理编程吗?

例如

@echo off
cd DirectoryOfFiles
echo "Starting up..."
java -Xmx512m mainFile
pause

mainFile = main.java? DirectoryOfFiles = 存放所有类文件的目录,如果运行文件与该目录相同,则删除此行

希望这就是您要求的内容。


我只是想让这个东西启动,没别的。一旦我确认它正在运行,我就不太关心监控它了。我的平台是嵌入式Linux(Angstrom),所以MS批处理DOS编程不是一个选项。谢谢你的建议。 - ColonelPackage

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接