プログラムの生活を監視するためのベストプラクティス
-
30-09-2019 - |
質問
プログラムライフモニタリングについてのご意見をお聞かせください。
これがシナリオです。簡単なプログラムがあります 通常は 作品は、それがよく書かれていることを意味し、例外は処理されます。
このプログラムが機能することを確認したい場合は、どのように操作しますか 永遠に?
Crontabのような外部ツールは利用できませんが、任意のオーバーヘッドを追加できます。
メインプログラムを継続的に「ピング」する別のプログラムを使用していますか?ファイルに触れ、ファイルの変更について別のプログラムで確認しますか?
そして、この2番目のプログラムが常に機能することをどのように保証しますか?
だから、さあ、この文脈であなたの意見またはベストプラクティスはどれですか?
脚注として、このプログラムをPythonで書く必要がありますが、それは汎用の質問です!
解決
組み込みシステムでは、よく行われることはウォッチドッグモジュールです。
ウォッチドッグは、ある場所をチェックします(ファイルであり、メモリの場所である可能性があります。
したがって、プローブの下でプログラムを使用することは、定期的にエポックスタンプを備えたプログラムname_watchdogファイルを記述することです。これは通常のループの一部になります。
その後、ウォッチドッグ(まったく異なるプロセス)がファイルを確認します。リストされている日付が十分に古くなった場合、他のプログラムは殺害され、再起動されます。ウォッチドッグには簡単なロジックがあるため、失敗する可能性ははるかに低いことに注意してください。
私は ポジティブ これを達成する他の方法もあります。これは1つの方法です。
編集: システムが構築されているスタックを考慮する必要があります。外部の依存関係が多いほど、失敗のリスクが高くなります。また、完璧な操作を探している場合は、プログラムの正確性の正式な証明を考慮する必要があります。
質問 本当 システムに期待しているものになります。どのような障害が受け入れられないか、どのような障害が予想されるかを補うことができます。
この質問は、Proof-Hardware-Softwareの共同設計の問題になります。私はあなたが何をしているのか、あなたの解決策が何であるかを知りたいと思っています。
他のヒント
ポール・ネイサンが言ったように、ウォッチドッグを使ってください。
たとえば、物事をより堅牢にするためにできることがいくつかあります。
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が使用するリターンコードの調査を開始します。 Quality
バイト。
上手。私はこの問題を長い間考えてきましたが、2つのことが出てきました。
ソフトウェアウォッチドッグは非常に単純である必要があるため、クラッシュは近くに不可能になるはずです。マニアックの人々にとって、興味深いプログラミングの課題は書くことができます ネット さまざまな言語で書かれたウォッチドッグは、他の言語と一緒に生き続ける必要があり、すべてを一緒にして、主なプロセスを監視する必要があります。
挑戦的で面白いとしても、それは大きいようです 時間の無駄, 、そしてシナリオは戦争の兵士のように見えます。
第二に、アプリケーションで私は開発しています ハードウェア ウォッチドッグ。これは常に重要な操作に存在する必要があります。
そのため、私のアプリケーションには、ハードウェアを更新し、プログラム寿命を監視するソフトウェアウォッチドッグがあります。
最終的に、ポール、私はあなたに完全に同意します。