私のデバイスのアップデートルーチンを作成しました。更新プロセスは、シリアルコンソール、SSH、Telnet、Webサーバー、またはREST APIを使用して開始できます。アップデートが開始されたら、アップデートが完了し、デバイスが再起動されるまで、すべてのソースからすべてのユーザー入力をブロックしたいと思います。 SSH、Telnet、Webサーバー、RESTサーバーをシャットダウンするのは簡単ですが、シリアルコンソールからの入力もブロックしたいと思います。
だから私は次のような状況にあります。
- ユーザーは
/dev/ttyS0
/のシリアルインターフェースを使用して接続します/dev/console
。 - シェルセッションが閉じると、inittabはセッションを再作成します。
- アップグレードが開始されると、ユーザーがコンソールに何も入力したくないので、そのシェルセッションへの入力をブロックしたいと思います。
cat /dev/ttyS0
私cat /dev/console
はシェルから入力を「盗んで」入力をブロックできることを発見しました。これにより、(cat /dev/ttyS0 > /dev/null) &
入力を見なくてもバックグラウンドで実行できます。
この方法は可能ですか?私がこれをやってはいけない理由はありますか?もっと良い方法がありますか?
答え1
init
しばらくの間、シェルがアクティブにならないように設定を一時的に変更することをお勧めします。
あなたが言及したので、inittab
私はあなたが使用していると仮定します。この方法で設定ファイルをsysvinit
変更して実行すると、これを行うことができます(設定ファイルを再度読み込み、内部状態を更新します)。シリアルコンソールで実行されているシェルのバージョンによっては、シェル自体を明示的に終了する必要があります。inittab
init q
init
sysvinit