
私は、CentOS ディストリビューションと、Wordpress や PrestaShop などの Web アプリを管理するための Apache インスタンスを備えたクラウド サーバーを持っています。
ログファイル ( ) にエラーが報告されていることに気付きましたvar/log/
。
- 特に
messages
:May 30 11:54:41 xxx00962 systemd: Starting Serial Getty on ttyS0... May 30 11:54:41 xxx00962 systemd: Started Serial Getty on ttyS0. May 30 11:54:51 xxx00962 systemd: [email protected] holdoff time over, scheduling restart. May 30 11:54:51 xxx00962 systemd: Stopping Serial Getty on ttyS0...
- そして
secure
:May 30 15:51:30 xxx00962 agetty[24693]: /dev/ttyS0: not a character device
xxx00962
は(匿名化された)ホスト名です。
何のためにあるのか分かりませんgetty
が、問題を解決したいと思います。
誰か私を助けて、getty
仕組みを説明してくれませんか?
答え1
getty
は最も古い Unix プログラムの 1 つです。Wietse Venema によって書かれた、およそ 20 年前にagetty
書かれた、似たようなプログラムを使用しています。getty
このプログラムが実行されているのは、システムが、キャラクタ デバイス ファイル名 のシリアル デバイスに接続された端末があると考えているためです/dev/ttyS0
。システムがブートストラップされたとき、 という名前のプログラムがをsystemd-getty-generator
検出しましたttyS0
。/sys/class/tty/console/active
これは、カーネル コマンド ラインで の後にリストされているためですconsole=
。ジェネレーターによって、[email protected]
テンプレート サービス ユニットが としてインスタンス化されました[email protected]
。これが、ログに記録されている試行されたアクティベーションのサービスです。
このサービスは、そのデバイスを介して端末ログオンを提供します。
何らかの理由で(2014年以降のバージョンのsystemdを使用している場合)、システムに不整合が発生し、今それ/dev/ttyS0
はないキャラクタデバイスファイル、ましてや端末であるキャラクタ デバイス。 systemd-getty-generator
ブートストラップ時にあると考えました。変更された可能性がある方法は少なくとも 2 つあります。どちらが発生したかは、質問からは判断できません。
修理/dev/ttyS0
。
- キャラクターデバイスであるはずなのにそうでない場合は、実行時に何が変更されているかを調べます。
- キャラクタ デバイスではないはずの場合は、ブートストラップ時にチェックしたときに端末デバイスであった理由を調べてください
systemd-getty-generator
。また、コマンド ラインでカーネルにコンソールであると伝えるのをやめてください。シリアル ポート (端末が接続されているかどうかに関係なく) がないためキャラクタ デバイスではないはずの場合は、存在しないシリアル ポートがコンソールであるとカーネルに伝えるのは単純に間違っています。 - 端末であるキャラクタ デバイスであるはずなのに、その端末からログオンできないようにしたい場合は、コマンド ラインでカーネルにそれがコンソールであると伝えるのをやめます。
- 端末であるキャラクタデバイスであるはずなのに、カーネルコンソールにしたい場合、まだその端末 (または他の非仮想端末コンソール) からログオンできないようにしたい場合は、
systemd-getty-generator
その主な機能が必要なものではないため無効にします。
参考文献
- https://unix.stackexchange.com/a/316279/5132
- レナート・ポエタリング(2013-10-07)。
systemd-getty-generator
. systemd マニュアル ページ。freedesktop.org。 - レナート・ポエタリング (2014-02-24).getty-generator: 使用する前に tty を検証する. systemd. GitHub.
- ヴェルナー・フィンクとカレル・ザック。
agetty
Ubuntu 15.04 のマニュアル ページ。 - Linux の ttys0、ttyUSB0、ttyAMA0 の違いは何ですか?
- あなたの Unix の TTY メジャー番号は何ですか?
- https://unix.stackexchange.com/a/248313/5132
答え2
どの Unix システムでも、getty
シリアル ポート接続 (有線端末またはモデム回線) にログイン プロンプトを表示し、ユーザーがログインするまで待機するプロセスの従来の名前です。
現代の (物理) システムでは、getty
プロセスは通常、テキスト モードの仮想コンソールにログイン プロンプトを提供します。システムにリモート コンソール アクセス ハードウェア (HP iLO、Sun/Oracle ILOM、Fujitsu IRMC、Oracle iDRAC など) がある場合、システム管理者が対応するシリアル ポートのプロセスを設定するだけで、リモート コンソール インターフェイスを介して SSH 接続を確立することでアクセスできる仮想シリアル ポートが提供されることがよくありますgetty
。
これは、Java または HTML5 を使用する Web ベースのリモート コンソール インターフェイスを使用するよりもはるかに信頼性が高いことがよくあります。仮想シリアル ポートは PC キーボードをエミュレートする必要がないため、受信した文字をキーボード スキャンコードに逆マッピングして戻す必要がなく、サーバー OS で実際に構成されているキーボード レイアウトが逆マッピング操作に使用されたものと一致することを期待する必要がありません。また、出力側では、表示可能なイメージを得るためにビデオ RAM をスクレイピングする必要がありません。
仮想マシンでは、ほぼ同じ理由で、仮想シリアル ポートをほぼ同じ方法で使用できます。つまり、仮想シリアル ポート接続では、「仮想 KVM」よりもデータの変換が少なくて済みます。
あなたの特定のケースでは、クラウド仮想マシン OS は仮想シリアルポートを として想定するように構成されているようです/dev/ttyS0
が、現在、仮想シリアルポートは VM に存在しないようです。おそらく、クラウド インフラストラクチャによる VM 初期化プロセスで使用されたのでしょうか。
現時点では何も役に立つ処理を行っていないようなので、 のgetty
プロセスをシャットダウンできる可能性があります。これを行うには、次のコマンドが最も簡単な解決策です。/dev/ttyS0
systemctl stop [email protected]
systemctl disable [email protected]
最初のコマンドは、systemd
次回の再起動までプロセスの開始を試行しないように指示し、2 番目のコマンドはそれを永続的に無効としてマークします。
2 番目のコマンドを使用するまでは、システムを再起動するだけで最初のコマンドを取り消すことができます。そのため、確信が持てない場合は、最初のコマンドを使用して数日待って、問題が発生しないかどうかを確認してください。VM にアクセスできなくなった場合は、再起動するだけで以前の状態に戻ります。
としてJdeBPの回答、ブート オプションも確認する必要があります。console=ttyS0
そこに がリストされている場合、でプロセスsystemd
が自動的に生成されます。getty
/dev/ttyS0
答え3
編集/etc/systemd/journald.conf
と設定で解決しました
MaxLevelSyslog=warning