Подтвердить что ты не робот

Может ли выскочить ожидание/респаун для процессов, которые развиваются более чем в два раза?

Я использую upstart для запуска/остановки/автоматического перезапуска демонов. Один из демонов вилки 4 раза. кулинарная книга для выскочек утверждает, что она поддерживает только двухстороннюю поддержку. Есть ли способ обхода?

Как это не удается

Если я пытаюсь использовать expect daemon или expect fork, upstart использует pid второй вилки. Когда я пытаюсь остановить работу, никто не реагирует на выскочку сигнала SIGKILL, и он зависает, пока вы не исчерпаете пространство pid и не оборветесь назад. Хуже, если добавить респаун. Upstart считает, что работа умерла и сразу же начинается еще одна.

Ошибка, подтвержденная восходящим потоком

Была введена ошибка для выскочки. Представленные решения включают в себя старый sysvinit, переписывают вашего демона или ждут повторной записи. RHEL близок к 2 годам за последним пакетом upstart, поэтому к тому времени, когда релиз будет выпущен, и мы получим обновление, ждать будет, вероятно, 4 года. Демон написан субподрядчиком субподрядчика подрядчика, поэтому он также не будет исправлен в ближайшее время.

4b9b3361

Ответ 1

Я придумал уродливый взломать эту работу. Он работает для моего приложения в моей системе. YMMV.

  • запустите приложение в разделе предварительного запуска
  • в разделе script выполните script, который работает до тех пор, пока выполняется приложение. Pid этого script - это то, что будет отслеживать выскочка.
  • в разделе после остановки уничтожает приложение

Пример

env DAEMON=/usr/bin/forky-application

pre-start script
    su -s /bin/sh -c "$DAEMON" joeuseraccount
end script

script 
    sleepWhileAppIsUp(){
        while pidof $1 >/dev/null; do
            sleep 1
        done
    }

    sleepWhileAppIsUp $DAEMON
end script

post-stop script
    if pidof $DAEMON;
    then
        kill `pidof $DAEMON`
        #pkill  $DAEMON # post-stop process (19300) terminated with status 1
    fi
end script

Аналогичный подход можно было бы использовать с файлами pid.