Monit은 어떤 이유로 파이프를 무시합니다.

Monit은 어떤 이유로 파이프를 무시합니다.

TV 헤드엔드 서비스를 모니터링하는 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 &

관련 정보