2013-09-02 2 views
1

Я искал способ правильно и чисто начать серию бинарных файлов, которые будут пипеткой, и пусть весь материал будет запущен нормально, как серия демонов была бы ... но не повезло с этим.Как начать пару процессов с пуском с помощью start-stop-daemon

В двух словах, вот моя команда:

ossrecord -s48000 -b16 -c2 -d/dev/oss/oss_envy24ht0/pcmin0 - | opusenc --bitrate 96 - - | oggfwd 192.168.1.12 7000 mysecret /mystream.opus 

В основном это захватывает ОСС v4 ИКЕ из capure устройства, трубы выхода AOUT в opusenc двоичного файла, в свою очередь, кодирует его в формат опус, и, наконец, , Я вывожу результат на сервер icecast2 (все это более или менее хорошо документировано на opus docs) И это работает красиво!

Проблема в том, что все это на cli, оно захватывает stdout и запускает выходной сигнал. Будучи всего, что вызывает ряд процессов с каналами, я не могу их контролировать. Кроме того, было бы неплохо иметь какой-то сценарий запуска/остановки, который позволил бы все это работать в фоновом режиме.

Я, как обычно, борюсь с демонами начала-остановки, но мои знания в основном охватывают обработку одного бинарного файла и его паразитных элементов (как указано в документах), и я думаю, что я слепо наступаю на домены священного гуру ,

Итак, возможно, кто-то может узнать, как это может быть полностью или частично выполнено.

ответ

2

я наткнулся на точно такую ​​же проблему и решил для меня, чтобы решить эту проблему раз и навсегда ;-) [Одна из причин были вашим вопросом здесь StackOverflow без ответа или даже комментария.]

Поэтому я написал небольшая программа под названием pipexec. Особенности в двух словах:

  1. Запуск программ и трубы их вместе.
  2. Когда SIGTERM, SIGINT или SIGQUIT отправляется в программу, он завершает все его дети, а затем сам.
  3. Когда SIGHUP отправлено на номер pipexec, он перезапускает всех детей (включая трубы между ними).
  4. Когда ребенок прерывается нормально (например, по сигналу), все дети завершаются и перезапускаются (включая трубы).
  5. Поддержка файла pid.

Это написано на простом C99 с учетом Linux. 500 строк кода, что приводит к выполнению около 20k исполняемых файлов. Я включил pipexec в RHEL6, используя /etc/init.d/functionsdaemon и killproc, и он работает без проблем. Здесь была использована функция pid-файла.

С уважением - Andreas

+0

Отличный !!! надеюсь, мы скоро увидим вашу работу над репозиториями Debian! – AlexOlivan

+0

@AlexOlivan: Вот он: https://packages.debian.org/search?searchon=names&keywords=pipexec :-) –

+0

Привет @Andreas Florath, я пытаюсь запустить vpn-соединение, используя команду vpnc, и я бы хотел используйте pipexec для запуска, Мое требование: Инсекс vpnc разбит по какой-то причине, он должен перезагрузиться. Поэтому я выполнил эту команду ./pipexec -p /var/run/vpnc/vpnc.pid -s 5 -/usr/sbin/vpnc /tmp/Sample.conf.После этого я не вижу процесса ps -ef | grep vpnc root 1586 1532 0 09:46 pts/0 00:00:00 grep --color = auto vpnc Все, что мне не хватает? – Sagar