NTPを使用して自分のコンピュータの時間を更新しようとしています。ただし、エラーが発生します。
host # ntpdate ntp1.example.org
10 Aug 12:38:50 ntpdate[7696]: the NTP socket is in use, exiting
「ソケット使用中」エラーとはどういう意味ですか?このソケットを使用するものとはどうすればわかりますか?
この問題は私のCentOS 4.xシステムで発生しますが、FreeBSD 7.x、Ubuntu 10.04、およびSolaris 10でも発生します。
答え1
あなたはできます
lsof -n | grep -i "TCP\|UDP" | grep -v "ESTABLISHED\|CLOSE_WAIT"
すべてのリスニングポートを確認しますが、ntpdは実行中です。
service ntpd status
「使用中のソケットとはどういう意味ですか?」いくつかの問題を解決したことを許すことができれば(非常に基本的な説明についてお詫び申し上げます。ほとんどの説明が役に立ちます)、TCP / IP(インターネット言語)は、すべてのコンピュータが一意に識別するIPアドレスをを指定します。このコンピュータはインターネット上にあります。さらに、IPアドレスあたりの接続可能なポート数は65,000です。
Web サーバーに接続する場合は、ブラウザーでサイトを開きますが、基本システムは実際には Web サーバー IP のポート 80 に接続します。 Webサーバーのデーモン(ポート80で接続をリッスンするプログラム)は、「ソケット」を使用してそのポートを開いたままにして独自に予約します。同時に、1つのプログラムのみが同じポートを使用できます。
ntpdが実行中なので、そのポートを使用しています。 「ntpdate」はポートにアクセスしようとしますが、ポートが開いているため、「ソケットがすでに使用中」というエラーが発生します。
編集する
UDPアカウントにも変更
答え2
netstatを使用して開いているソケットを見つけることもできます。他のポスターが提案したように、lsofを使用するよりもはるかにきれいです。 rootでこのコマンドラインを試してください
netstat -lp -u -t
関連する PID やプログラムを含むすべてのリスニング接続を表示します。 -l パラメーターはリスニング接続を指定し、-p は PID/名前を表示することを指定し、-t および -u は TCP 接続と UDP 接続 (IPv4 および IPv6) のみを netstat に通知します。
数値のポートとホスト名(つまり、ホストの場合は解決されず、ポートの場合はサービス名に変換されません)を表示するには、上記の-n
コマンドラインに追加します。
編集する:これはLinuxで動作します。私はBSDベースのシステムがないので、BSDでどれだけうまく機能しているかわかりません。
答え3
FreeBSDでは、lsofが機能しない場合(たとえば、何らかの理由で/ dev / memを持たない仮想化システムで)、sockstatを使用することもできます。 IPv4ソケットを受信するすべてのプログラムのリストを取得するには:
sockstat -l4
答え4
lsof
を使用して、このソケットを使用するアプリケーションを見つけることができます。