我正在用shairport在工作中播放音乐。我正在Debian机器上运行它(树莓)。在它的/etc/init.d/shairport文件中,它只有start\\stop命令。我想添加一个重新启动的。以下是目前为止的代码:
case "$1" in
restart)
service shairport stop
service shairport start
;;
start)
/usr/local/bin/shairport -d -a "$NAME" -p 5002 -k "madafaka" -w -B "mpc stop"
;;
stop)
killall shairport
;;
*)
echo "Usage: /etc/init.d/shairport {start|stop|restart}"
exit 1
;;
esac
exit 0问题是,当我运行“服务shairport重新启动”时,服务将停止,从而运行"killall shairport“并杀死bash脚本进程本身。所以“开始”永远不会被执行。
如何使killall杀死除当前脚本之外的每个shairport?
我的想法是得到pid,并排除它,但我找不到如何做到这一点。
发布于 2015-11-25 09:36:35
在linux中,您可以知道脚本文件使用的进程ID:$$。
你只需要检查一下你没有用:
stop)
for pid in $(pgrep shairport); do
if[$pid != $$]
kill $pid
fi
done发布于 2015-11-25 09:35:12
开始部分应该写下已启动进程的PID。像echo $? > /var/run/shairport.pid这样的东西就行了。
停止脚本的一部分将使用我们创建的.pid文件中的PID,并终止正确的进程。据我所知,这是大多数Linux服务所做的事情。
发布于 2015-11-27 11:20:44
由于我所选择的答案并不是开箱即用,下面是我最后得到的代码:
case "$1" in
restart)
for pid in $(pgrep shairport); do
if [ "$pid" != $$ ]; then
kill $pid
fi
done
/usr/local/bin/shairport -d -a "$NAME" -p 5002 -k "madafaka" -w -B "mpc stop"
;;
start)
/usr/local/bin/shairport -d -a "$NAME" -p 5002 -k "madafaka" -w -B "mpc stop"
;;
stop)
killall shairport
;;
*)
echo "Usage: /etc/init.d/shairport {start|stop|restart}"
exit 1
;;
esachttps://stackoverflow.com/questions/33912618
复制相似问题