![Monit 由于某种原因忽略管道](https://linux22.com/image/165084/Monit%20%E7%94%B1%E4%BA%8E%E6%9F%90%E7%A7%8D%E5%8E%9F%E5%9B%A0%E5%BF%BD%E7%95%A5%E7%AE%A1%E9%81%93.png)
我有 Monit 脚本来监视我的电视头端服务。要启动程序,我想使用启动命令
start program = "/etc/init.d/tvheadend start
&& /usr/bin/python /root/antik_epg/antik_xmltv.py
| /usr/bin/socat - UNIX-CONNECT:/etc/tvheadend/epggrab/xmltv.sock"
但由于某种原因,Monit 会忽略管道后的命令。它只是启动tvheadend
并运行/usr/bin/python /root/antik_epg/antik_xmltv.py
。
它不运行/usr/bin/socat - UNIX-CONNECT:/etc/tvheadend/epggrab/xmltv.sock
如何运行所有命令?我尝试运行自定义脚本:
start program = "/bin/ash -c '/root/tvheadend_start.sh'"
但结果是一样的。
该命令可以直接从 bash 完美运行。
感谢您的帮助。
答案1
我已经找到了解决方案。我没有使用命名管道,而是使用了命名管道。
start program = "/bin/ash -c /root/tvheadend_start.sh"
在 /root/tvheadend_start.sh 脚本中:
#!/bin/sh
/etc/init.d/tvheadend start
/usr/bin/python /root/antik_epg/antik_xmltv.py > /root/pipe &
/usr/bin/socat - UNIX-CONNECT:/etc/tvheadend/epggrab/xmltv.sock < /root/pipe &