Лучшая практика для мониторинга жизни программы - PullRequest
1 голос
/ 03 сентября 2010

Я хочу услышать ваше мнение о мониторинге жизни программы.

Это сценарий.У вас есть простая программа, которая обычно работает, это означает, что она хорошо написана, исключение обработано и т. Д.

Как вы будете работать, если хотите убедиться, что эта программа работает FOREVER ?

Нет доступных внешних инструментов, таких как crontab, но можно добавить любые служебные данные.

Использование другой программы, которая постоянно "пингует" основную программу?Прикосновение к файлу и проверка с помощью другой программы для изменения файла?

И как вы гарантируете, что эта вторая программа всегда работает?

Итак, давай, скажи мне, какое твое мнение или лучшепопрактикуйтесь в этом контексте!

В качестве сноски я должен написать эту программу на Python, но это вопрос общего назначения!

Ответы [ 3 ]

5 голосов
/ 03 сентября 2010

Во встроенных системах часто используется сторожевой модуль.

Сторожевой таймер проверяет какое-либо местоположение (это может быть файл, может быть место в памяти и т. Д.) И перезапускает исследуемую систему, если это местоположение не соответствует критериям.

Таким образом, ваша программа может периодически проверять какой-либо файл programname_watchdog со штампом эпохи. Это будет частью обычного цикла.

Тогда ваш сторожевой таймер (в совершенно ином процессе) проверит файл. Если указанная дата была достаточно устаревшей, другая программа была бы убита и перезапущена, так как считалось, что она критически неисправна (зависла или потерпела крах). Обратите внимание, что ваш сторожевой таймер будет иметь простую логику, поэтому его шансы на сбой намного ниже

Я положительный есть и другие способы сделать это. Это только один из способов.

edit: Вы должны рассмотреть стек, на котором построена ваша система. Чем больше у вас внешних зависимостей, тем больше риск отказа. Вы также должны рассмотреть формальное доказательство правильности программы, если вы ищете идеальную работу.

Вопрос на самом деле становится тем, что вы ожидаете от своей системы; какие сбои недопустимы и какие сбои ожидаются, чтобы вы могли их компенсировать.

Этот вопрос становится проблемой совместного проектирования аппаратного и программного обеспечения очень быстро (и тоже дорого). Мне любопытно посмотреть, что вы делаете и каково ваше решение.

0 голосов
/ 07 сентября 2010

Хорошо. Я долго думал над этой проблемой, и возникли 2 вещи.

Software Watchdog должен быть настолько простым, что сбой должен быть практически невозможен. Для людей-маньяков интересной задачей программирования может быть написание net сторожевых таймеров, написанных на разных языках, которые должны поддерживать связь друг с другом и все вместе должны контролировать основной процесс.

Даже если это сложно и интересно, это кажется пустой тратой времени , и сценарий выглядит как солдат на войне.

Во-вторых, в разрабатываемом приложении имеется сторожевой таймер Hardware , который всегда должен присутствовать при критической работе.

Так что теперь мое приложение имеет программный сторожевой таймер, который обновляет аппаратный и контролирует срок службы программы.

В конце концов, Пол, я полностью согласен с вами.

0 голосов
/ 04 сентября 2010

Как сказал Пол Натан, воспользуйтесь сторожевым псом.

Есть несколько вещей, которые вы можете сделать, чтобы сделать вещи более надежными, например:

int lastTick;

int RemoteProcessState()
{
    int tick = GetRemoteTick();

    if (tick == -1)
    {
        // Process recoverable error state.
        return -1;
    }

    if (tick == -2)
    {
        // Process unrecoverable error state.
        return -1;
    }

    if (tick < 0)
    {
        // Detect if the watchdog is overflowed.
                    return -1;
    }

    if (abs(abs(tick) - abs(lastTick)) > ALLOWED_PROCESS_LAG)
    {
        // Resynchronize process
    }
    else
    {
        // Process running normally.
    }

    return 0;
}

Это образец псевдокодов из реального кода, используемого во встроенном RTU для управления процессом.

Это примитивно, но работает. Это не только гарантирует, что удаленный процесс активен, но если удаленный процесс дрейфует в скорости вычислений (скорость сканирования зависит от размера и сложности программы), он будет обеспечивать синхронизацию двух процессов.

Если вам нужно больше данных, начните исследовать коды возврата, используемые Modbus, или как протокол OPC обрабатывает свой Quality байт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...