我一直在谷歌上寻找一种方法来正确而干净地开始一系列的二进制文件,这些二进制文件已被连接到一起,并让所有的东西都能正常启动,就像一系列守护进程一样...但是没有运气此
简而言之,这是我的命令:
ossrecord -s48000 -b16 -c2 -d/dev/oss/oss_envy24ht0/pcmin0 - | opusenc --bitrate 96 - - | oggfwd 192.168.1.12 7000 mysecret /mystream.opus
基本上它从一个捕获设备抓取oss v4 pcm音频,将输出aout传递给opusenc二进制文件,然后将其编码为opus格式,最后,我将结果输出到icecast2服务器(所有这些都是更多或者在opus docs上记录得不太好 而且效果很好!
问题是所有这些都发生在cli上,它捕获stdout ans开始大喊输出。作为所有那些东西,我无法控制它们的一系列管道流程。 此外,拥有某种启动/停止脚本会很好,这样就可以让所有这些在后台运行。
我一直在努力使用start-stop-daemon,但我的知识基本上涵盖了处理单个二进制文件及其参数(如文档中所示),而且我认为我盲目地踩着神圣大师的领域。
所以,也许有人可能会发现这是如何完全或部分完成的。
答案 0 :(得分:2)
我遇到了完全相同的问题,并决定让我一次又一次地解决这个问题;-) [一个原因是你的问题在stackoverflow没有回答甚至评论。]
因此我写了一个名为pipexec的小程序。简而言之:
SIGTERM
,SIGINT
或SIGQUIT
发送给该计划时,它会终止所有孩子,然后终止自己。SIGHUP
被发送到 pipexec 时,它会重新启动所有子项(包括它们之间的管道)。它以简单的C99编写,并考虑到了Linux。 500行代码导致大约20k可执行文件。我使用pipexec
/etc/init.d/functions
和daemon
将killproc
集成到RHEL6中,并且无缝地工作。这里使用了pid文件功能。
亲切的问候 - 安德烈亚斯