1

プログラムライフモニタリングについてのご意見をお聞かせください。

これがシナリオです。通常は機能する単純なプログラムがあります。つまり、適切に記述されていたり、例外が処理されたりします。

このプログラムが永遠に機能することを保証したい場合、どのように操作しますか?

crontabのような外部ツールは利用できませんが、オーバーヘッドを追加することができます。

メインプログラムを継続的に「ping」する別のプログラムを使用していますか?ファイルに触れて、ファイルの変更について別のプログラムに確認しますか?

そして、この2番目のプログラムが常に機能することをどのように保証しますか?

さあ、この文脈でのあなたの意見やベストプラクティスを教えてください!

脚注として、私はこのプログラムをPythonで作成する必要がありますが、これは汎用の質問です。

4

3 に答える 3

5

組み込みシステムでは、よく行われるのはウォッチドッグモジュールです。

ウォッチドッグは、ある場所(ファイルの場合もあれば、メモリの場所の場合もあります)をチェックし、その場所が基準を満たしていない場合は、調査中のシステムを再起動します。

したがって、プローブの下にあるプログラムに、エポックスタンプを使用してprogramname_watchdogファイルを定期的に書き込むようにすることができます。これは通常のループの一部になります。

次に、ウォッチドッグ(まったく異なるプロセス)がファイルをチェックします。リストされた日付が十分に古くなっている場合、他のプログラムは重大な誤動作(ハングまたはクラッシュ)が発生したと見なされるため、強制終了されて再起動されます。ウォッチドッグにはいくつかの単純なロジックがあるため、失敗する可能性ははるかに低いことに注意してください。

これを達成する他の方法もあると私は確信しています。これは1つの方法にすぎません。

編集:システムが構築されているスタックを考慮する必要があります。外部依存関係が多いほど、失敗のリスクが高くなります。完璧な操作を探している場合は、プログラムの正当性の正式な証明も考慮する必要があります。

問題は、実際にシステムに期待していることです。どのような種類の障害が許容できないのか、どのような種類の障害が予想されるので、それらを補うことができます。

この質問は、非常に迅速に(そして高価でもある)証明-ハードウェア-ソフトウェアの共同設計の問題になります。私はあなたが何をしているのか、そしてあなたの解決策が何であるのか知りたいです。

于 2010-09-03T17:15:27.150 に答える
0

ポールネイサンが言ったように、ウォッチドッグを使用してください。

ただし、物事をより堅牢にするためにできることがいくつかあります。たとえば、次のようになります。

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で使用される実際のコードからの疑似コードサンプルです。

その原始的ですが、それは機能します。これにより、リモートプロセスが有効であることが保証されるだけでなく、リモートプロセスの計算速度が低下した場合(スキャンレートはプログラムのサイズと複雑さの影響を受けます)、2つのプロセスが引き続き同期されていることが保証されます。

より多くのデータが必要な場合は、Modbusで使用されるリターンコード、またはOPCプロトコルがそのQualityバイトの管理をどのように処理するかを調査し始めます。

于 2010-09-03T21:17:59.033 に答える
0

上手。私はこの問題について長い間考えてきましたが、2つのことが起こりました。

ソフトウェアウォッチドッグは非常に単純であるため、クラッシュはほぼ不可能です。マニアックな人々にとって、興味深いプログラミングの課題は、さまざまな言語で書かれたウォッチドッグのネットを作成することです。ウォッチドッグは、互いに生き続ける必要があり、すべて一緒にメインプロセスを監視する必要があります。

挑戦的で面白いとしても、それは時間の大きな無駄のようであり、シナリオは戦争中の兵士のように見えます。

次に、私が開発しているアプリケーションには、ハードウェアウォッチドッグがあります。これは、重要な操作で常に存在する必要があります。

これで、私のアプリケーションには、ハードウェアを更新し、プログラムの寿命を監視するソフトウェアウォッチドッグがあります。

結局、ポール、私はあなたに完全に同意します。

于 2010-09-07T16:11:15.150 に答える