フェイルオーバー機能を持つReboot()コマンド

フェイルオーバー機能を持つReboot()コマンド

私のアプリケーションでReboot()呼び出しを実装しています。組み込みアプリケーションなので、コンソール、キーボード、電源スイッチはありません。それにもかかわらず、Reboot()は最終的にシステムを再起動する必要があります。理想的には、正常に失敗することをお勧めします。

過去にシステムが起動または再起動されなかったため、reboot問題が発生した状況がありました。shutdownたとえば、ドライブを同期できません。取り外したUSBフラッシュドライブをマウント解除します。

私のシステムは読み取り専用でマウントされたルートファイルシステムと一緒に組み込まれているので、突然の停電は大きな問題ではありません。しかし、フラッシュドライブにログを記録し、可能であれば保存したいと思います。

私の現在のReboot()は次のようになります。

void Reboot()
{
    system( "reboot" );     // try the reboot
    sleep(2);
    system( "reboot -f" );      // force
    sleep(2);
    system( "reboot -f -n" );   // force and don't try to sync
    sleep(2);
    system( "kill 1" );     // process 1 is the root process of all
    sleep(2);
    Reset();
}

リセットコマンドは、失敗しないハードシステムリセットです。システムには監視タイマーもあります。

私のReboot()関数に追加/代替/変更された内容について人々がコメントしたいですか?

例えば魔法システムリクエスト

答え1

システムには監視タイマーもあります。

私はこれがあなたの答えだと思います。ブロックキャッシュを空にし、ウォッチャーの足で蹴りを止めます。私は多くの組み込みシステムで作業してきましたが、従来のサーバー/ PCメカニズムを使用して再起動を実行したシステムを覚えていません。

関連情報