无法使用start-stop-daemon停止init脚本

时间:2017-06-21 15:09:37

标签: linux bash shell

我想使用start-stop-daemon来停止它已经启动的脚本,但是目前这些脚本没有被杀死,因此我已经采取了黑客行为:

#!/bin/sh
case $1 in
 start)
  start-stop-daemon --start --background -c myapp --exec /home/myapp/dev-myapp.sh
 ;;
 stop)
  # couldn't get this to work  - hacking around it
  #start-stop-daemon --stop  -c myapp --exec /home/myapp/dev-myapp.sh

  # hack
  killall dev-myapp.sh
  sleep 3
  killall -9 dev-myapp.sh

 ;;
 restart)
  $0 stop
  $0 start
 ;;
 *)
     echo "No such command. "
     echo "Usage: $0 start|stop|restart"
esac
exit 0

如何让脚本终止使用start-stop-daemon开始的bash脚本?

编辑:我认为无法停止进程与手册页中的这一部分有关:

-x, --exec executable
      Check for processes that are instances of this executable. The executable argument should be an  absolute  pathname.  Note:  this
      might not work as intended with interpreted scripts, as the executable will point to the interpreter. Take into account processes
      running from inside a chroot will also be matched, so other match restrictions might be needed.

所以我可能会被迫依赖名称检测,但我不知道进程名称是什么......这是完整的绝对文件名,文件名还是别的什么?

1 个答案:

答案 0 :(得分:1)

关于您的评论,如果您愿意扩展正在运行的shellcript,则可以使用pid文件。在实践中,也许你想让它成为你的脚本的一个选项,但作为一个例子,这一行就足够了:

echo $$ >/var/run/dev-myapp.sh.pid

然后,对start-stop-daemon使用这些匹配参数,如果需要,用任何执行脚本的shell替换/bin/bash

-p /var/run/dev-myapp.sh.pid -x /bin/bash

(澄清一下:脚本的进程名称是脚本解释器的进程名称,在您的情况下是shell)