Является ли создание фонового задания в сценарии инициализации хорошей практикой, если процесс не может демонизировать себя?

Является ли создание фонового задания в сценарии инициализации хорошей практикой, если процесс не может демонизировать себя?

Я новичок в *nix и столкнулся с необходимостью остановить несколько процессов, которые должны быть запущены 100% времени, в фоновом режиме с помощью &.

Для этого я использую следующую строку в скрипте init.d (запускаемом от имени пользователя) user:

su -c 'process arg1 arg2 -w - | process2 arg1 -r - &' user

(где -w записывает, а -r читает из STDOUT, STDIN)

В частности, я знаю, что это неприемлемо, поскольку процессы недостаточно защищены от внешнего влияния.

Допустимо ли создавать фоновые задания для «услуг»?

Стоит ли вместо этого использовать FIFO/именованный канал для управления межпроцессным взаимодействием?

Если да, то мне все равно создавать оба процесса как фоновые задания? Это стабильно?

Для получения подробной информации см.эта ветка рассылки.

Спасибо,

Мэтт

решение1

В частности, я знаю, что это неприемлемо, поскольку процессы недостаточно защищены от внешнего влияния.

Допустимо ли создавать фоновые задания для «услуг»?

Если нет другого пути (то есть, служба не будет разветвляться сама по себе), то, вероятно, да. В Debian start-stop-daemonесть --backgroundпараметр для таких случаев:

   -b, --background
          Typically used with programs that don't  detach  on  their  own.
          This option will force start-stop-daemon to fork before starting
          the  process,  and  force  it  into  the  background.   WARNING:
          start-stop-daemon  cannot  check  the exit status if the process
          fails to execute for any reason. This is a last resort,  and  is
          only  meant  for  programs  that either make no sense forking on
          their own, or where it's not feasible to add the code  for  them
          to do this themselves.

решение2

Поскольку на первый вопрос уже дан ответ, я сосредоточусь на последних двух.

Несколько дней назад я боролся с похожей проблемой: мне нужно было запустить некоторые процессы через конвейер из /etc/init.dскриптов. Чтобы решить эту проблему, я взглянул на RHEL6 ( daemonи ) и Debian ( ). Я узнал, что оба не очень хорошо обрабатывают конвейеры. Даже если их как killproc- то удавалось запустить, возникали серьезные проблемы с их остановкой. Поэтому я написал небольшую утилиту/etc/init.d/functionsstart-stop-daemonpipexec. Эта программа запускает конвейер программ, но ведет себя как одна программа. Пример: когда SIGTERMотправляется a pipexec, она убивает всех потомков, а затем и себя. Также поддерживается обработка pid-файлов, что облегчает вам жизнь при интеграции с RHEL6 daemonи killproc.

Должен ли я вместо этого использовать FIFO/именованный канал для обработки межпроцессного взаимодействия? Если да, должен ли я все равно создавать оба процесса как фоновые задания? Это стабильно?

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

Я интегрировался pipexecс RHEL6, и никаких проблем не возникло; всё просто работает.

С наилучшими пожеланиями - Андреас

Связанный контент