在Debian 7.9中启动Jar

时间:2016-02-13 02:38:00

标签: java bash debian sh beagleboneblack

我做了一个可运行的jar,它在我的Debian中运行良好,我想在我的beaglebone板启动时自动启动它并在它关闭时杀死它。我在文件夹/etc/init.d

中尝试使用此file.sh
#!/bin/bash
### BEGIN INIT INFO
# Provides:          myscript.sh
# Required-Start:    $syslog
# Required-Stop:     $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: myscript.sh
### END INIT INFO
# MyApp
#
# description: It lanch the Jar file 

case $1 in
    start)
        /bin/bash /usr/local/bin/myapp-start.sh
    ;;
    stop)
        /bin/bash /usr/local/bin/myapp-stop.sh
    ;;
    restart)
        /bin/bash /usr/local/bin/myapp-stop.sh
        /bin/bash /usr/local/bin/myapp-start.sh
    ;;
esac
exit 0

我也创建了myapp-start.sh并以这种方式停止:

#!/bin/bash

/home/java -jar myjar.jar

并停止:

#!/bin/bash
# Grabs and kill a process 

pid=`ps aux | grep myapp | awk '{print $2}'`
kill -9 $pid

当我启动update-rc.d myscript.sh默认值时,我收到了它: update-rc.d:使用基于依赖的引导排序

我还能做些什么来解决它?

1 个答案:

答案 0 :(得分:1)

我可以看到几个问题:

  1. 您不应在任何脚本中缩进#!/bin/bash行。它只有在#!个字符是文件的前两个字符时才有效。 (操作系统内核在脚本文件中对此行进行解码,非常挑剔。)

    该文件还需要在文件的权限中设置相应的执行位;例如“ls -l myapp-start.s”需要为用户,组或其他人显示“x”。

  2. 如果您的#!行正确无误,那么您可以像这样运行脚本:

    /usr/local/bin/myapp-start.sh
    
  3. 这几乎肯定不正确:

     /home/java -jar myjar.jar
    

    两个问题:

    • 除非你做了一些奇怪的事情,/home/java不是java命令的正确路径名。

    • 您已使用相对路径指定了JAR文件名。如果/ java运行时,目前还不清楚当前目录是什么,但myjar.jar文件不太可能在当前目录中。

  4. 调试这样的shell脚本的一个有用技巧是将set -xset -v添加到脚本中以查看它正在做什么。有关具体内容的详细信息,请参阅man bash