我做了一个可运行的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:使用基于依赖的引导排序
我还能做些什么来解决它?
答案 0 :(得分:1)
我可以看到几个问题:
您不应在任何脚本中缩进#!/bin/bash
行。它只有在#!
个字符是文件的前两个字符时才有效。 (操作系统内核在脚本文件中对此行进行解码,非常挑剔。)
该文件还需要在文件的权限中设置相应的执行位;例如“ls -l myapp-start.s”需要为用户,组或其他人显示“x”。
如果您的#!
行正确无误,那么您可以像这样运行脚本:
/usr/local/bin/myapp-start.sh
这几乎肯定不正确:
/home/java -jar myjar.jar
两个问题:
除非你做了一些奇怪的事情,/home/java
不是java
命令的正确路径名。
您已使用相对路径指定了JAR文件名。如果/ java
运行时,目前还不清楚当前目录是什么,但myjar.jar
文件不太可能在当前目录中。
调试这样的shell脚本的一个有用技巧是将set -x
或set -v
添加到脚本中以查看它正在做什么。有关具体内容的详细信息,请参阅man bash
。