我想使用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.
所以我可能会被迫依赖名称检测,但我不知道进程名称是什么......这是完整的绝对文件名,文件名还是别的什么?
答案 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)