在/etc/init.d启动时的Unix脚本无法正常工作

时间:2014-07-23 14:45:40

标签: java bash unix startup init.d

我一直在努力让我的Java应用程序在启动后作为守护进程在后台运行。我已按照最高回答here中的说明进行操作,但无济于事。

这是我的/etc/init.d/myapp文件:

#!/bin/bash
# MyApp
#
# description: bla bla

case $1 in
    start)
        /bin/bash /var/lib/myapp/start.sh
    ;;
    stop)
        /bin/bash /var/lib/myapp/stop.sh
    ;;
    restart)
        /bin/bash /var/lib/myapp/stop.sh
        /bin/bash /var/lib/myapp/start.sh
    ;;
esac
exit 0

至于/var/lib/myapp/start.sh,它看起来像这样:

#!/bin/bash
java -jar myapp-1.0.0RC.jar &

通过ssh从终端运行时工作正常。

我还运行了update-rc.d myscript defaults命令,只收到有关标题和LSB的警告

在此之后,一旦我重新启动服务器,该应用程序就不会运行。任何帮助表示赞赏。

感谢。

2 个答案:

答案 0 :(得分:2)

运行bash脚本时,它们不会自动从包含它们的同一目录运行。

在启动jar之前,您需要更新脚本以将目录更改为包含脚本的目录:

#!/bin/bash
cd /var/lib/myapp/
java -jar myapp-1.0.0RC.jar &

或者,请参考带有完整路径的jar文件:

#!/bin/bash
java -jar /var/lib/myapp/myapp-1.0.0RC.jar &

答案 1 :(得分:0)

检查您的服务是否已通过chkconfig正确注册

$ chkconfig --list

如果没有,您可以在输出中看到您的服务,请尝试将此行添加到您的脚本

#!/bin/bash
# chkconfig: 2345 95 20 
# description: bla bla
# processname: myapp

然后运行

chkconfig --add myapp

有关详细信息,请查看chkconfig

的手册页