対話型シェルでのユーザー入力を防ぐには、「cat /dev/ttyS0」を使用してください。

対話型シェルでのユーザー入力を防ぐには、「cat /dev/ttyS0」を使用してください。

私のデバイスのアップデートルーチンを作成しました。更新プロセスは、シリアルコンソール、SSH、Telnet、Webサーバー、またはREST APIを使用して開始できます。アップデートが開始されたら、アップデートが完了し、デバイスが再起動されるまで、すべてのソースからすべてのユーザー入力をブロックしたいと思います。 SSH、Telnet、Webサーバー、RESTサーバーをシャットダウンするのは簡単ですが、シリアルコンソールからの入力もブロックしたいと思います。

だから私は次のような状況にあります。

  • ユーザーは/dev/ttyS0/のシリアルインターフェースを使用して接続します/dev/console
  • シェルセッションが閉じると、inittabはセッションを再作成します。
  • アップグレードが開始されると、ユーザーがコンソールに何も入力したくないので、そのシェルセッションへの入力をブロックしたいと思います。

cat /dev/ttyS0cat /dev/consoleはシェルから入力を「盗んで」入力をブロックできることを発見しました。これにより、(cat /dev/ttyS0 > /dev/null) &入力を見なくてもバックグラウンドで実行できます。

この方法は可能ですか?私がこれをやってはいけない理由はありますか?もっと良い方法がありますか?

答え1

initしばらくの間、シェルがアクティブにならないように設定を一時的に変更することをお勧めします。

あなたが言及したので、inittab私はあなたが使用していると仮定します。この方法で設定ファイルをsysvinit変更して実行すると、これを行うことができます(設定ファイルを再度読み込み、内部状態を更新します)。シリアルコンソールで実行されているシェルのバージョンによっては、シェル自体を明示的に終了する必要があります。inittabinit qinitsysvinit

関連情報