トラブル対応と裏技

 

トラブルはつきものですが、対応法を知っていればじょぶじょぶだいじょぶ。

○NNTPでニュースが出ていかない

まず、innxmit(cronで定期的に起動するnntpsendが接続先別に起動するNNTPでニュースを送るプログラム)が動いているか見ます。

これが動いているとニュースを送っている最中という意味です。

pub@ji3yva# ps ax|grep inn

200 ? S 0:07 /usr/local/news/bin/innd -p4 -r

353 ? S 1:58 sh /usr/local/news/bin/innwatch

17098 ? S 0:00 innxmit -a je3kov.felix.or.jp /usr/local/news/spool/outgoing

29147 p4 S 0:00 grep inn

JE3KOV向けだけがいますね。

こんどはコネクションの状態を見ます。

pub@ji3yva# netstat --inet

Active Internet connections (w/o servers)

Proto Recv-Q Send-Q Local Address Foreign Address State

tcp 0 146 ji3yva.felix.or.:telnet je4smq.spd.prug.o:17737 ESTABLISHED

tcp 0 0 ji3yva.felix.or.jp:2543 je3kov.felix.or.jp:nntp ESTABLISHED

tcp 0 0 localhost:canna localhost:1024 ESTABLISHED

tcp 0 0 localhost:1024 localhost:canna ESTABLISHED

nntpの行のSend-qが0ですね。これはJE3KOVからの応答を待っていると言う意味です。

察するに、NNTPで会話中にJE3KOVが停止か見えなくなり、会話が続かない状態になっ

ているようです。

0で無い場合は単純に通りが悪いだけで、通信自体は正常ですのでそのまましばらく

待ちましょう。

今時のNNTPは大体こんな会話をします

1 mode stream(連続してMessage-IDの送信を行い、持っているか持っていないかを返答)を問い合わせ

2 OKなら送り側が未送信のニュースのMessage-IDを送信

3 受け側は持っているかどうかを返答

4 送り側は受け側が持っていないと返答があったニュースの本文を送信

5 送り側が全て送り終ったらquitを送信

少なくともmode streamのネゴシエーション、Message-IDの照合時に停止してしまうと

待つことが分かると思います。

メールの方のsendmailはタイムアウトという概念があるのでこういうケースは起きに

くいのですが、innのinnxmitはちょっと間抜けなのでコネクションが不安定な場合に

よくこのような状況になります。

対策は簡単で、rootになってinnxmitをkillするだけです。

しばらくしたら再度続きを送り出します。

毎回不定のプロセス番号は既にpsで見て17098番と分かっていますから、

pub@ji3yva# su

Password:

bash# kill 17098

さあ、どうなるかな?

少し待ってから、

bash# netstat --inet

Active Internet connections (w/o servers)

Proto Recv-Q Send-Q Local Address Foreign Address State

tcp 0 19788 ji3yva.felix.or.jp:6418 je3kov.felix.or.jp:nntp ESTABLISHED

tcp 0 139 ji3yva.felix.or.:telnet je4smq.spd.prug.o:17737 ESTABLISHED

tcp 0 0 localhost:canna localhost:1024 ESTABLISHED

tcp 0 0 localhost:1024 localhost:canna ESTABLISHED

めでたくSend-Qが増えました。おそらくしっかりと送信していることでしょう。

NNTPで接続している方は、たまには/var/spool/news/outgoingを見て、パケット

が見えているのに出て行かない相手がいれば良く確かめて、必要ならinnxmitをkillし

ましょうね。

逆に特定の相手からのみニュースが届かない場合は、その相手が上のような状況に

なっているかも。

早速相手にtelnetして確認。

一般ユーザのままでも状態を調べることは可能です。

○sendmailをOSを再起動せずに停止/起動する。

メールのルートを変えるために/etc/sendmail.cfを書き換えた場合に使用します。

ps ax|grepでsendmailのプロセスIDを探します。

maachan@je4smq(104)% ps ax|grep sendmail

167 ? S 0:00 sendmail: accepting connections on port 25

4676 p8 S 0:00 grep sendmail

この例だと167ですね。

おもむろに、

maachan@je4smq(104)% kill -HUP 167

これでおしまい。

リモートメンテナンスで使える技です。

○時刻合わせをする

よその信頼できるマシンの時刻に合わせる方法です。

作業は全て管理者権限(root)で行って下さい。

標準では無いので、ソースを取って来ます。

xntp3-5.93-export.tar.gzです。

IIJのarchieサーバで探せばたくさん出てきます。

バージョンは少々違っても良いでしょう。

最新じゃないかも。

まずは展開してコンパイル。

bash# tar zxvf xntp3-5.93-export.tar.gz

bash# cd xntp3-5.93-export

bash# ./configure

bash# make

bash# make install

はい、いつも通りですね。

とりあえずどこかのタイムサーバへ繋いで合わせてみましょう。

近所に無い人はパスして下さい。

インタネットへIP接続できる場合は、

bash# /usr/local/bin/ntpdate 133.100.9.2

とでもしてみましょう。福岡大学のサーバです。

うまく行けば以下のような表示が出て時刻が合います。

16 Oct 08:29:41 ntpdate[4309]: step time server 133.100.9.2 offset -206.199960 sec

サーバの反応が鈍い場合は-t 100等付加してタイムアウトを伸ばしましょう。

uucp over TCP/IP等をしていて日に何回かIP接続する人ならこれで問題無いですが、

そうでない人はどうしましょう。

そこで、

○普段は自分自身がタイムサーバになる

○日に数回正しい時刻を持っていると思えるよそのタイムサーバに時刻同期する

というポリシーで行きたいと思います。

ネットワークの誰かが正しい時刻を持っていれば、それが皆に伝わるという訳です。

まず、タイムサーバに仕立てます。

/etc/ntp.confを作ります。

server 127.127.1.1

fudge 127.127.1.1 stratum 0

driftfile /etc/ntp.drift

disable auth

このままコピーで結構です。

内蔵時計を基準にします、という意味らしいです。

次にタイムサーバを起動です。

/etc/rc.d/rc.xntpdという名前で起動スクリプトを作りましょう。

chmod +x rc.xntpdも必要です。

#!/bin/sh

#

# Start UP NTP Server

/usr/local/bin/xntpd -p /var/run/xntpd.pid

自動起動させるためには/etc/rc.d/rc.localから呼ぶようにしておけば良いですね。

これでタイムサーバになりました。

状態を見ましょう。

bash# ntpq -p

remote refid st t when poll reach delay offset disp

==============================================================================

*LOCAL(1) .LCL. 0 l 34 64 377 0.00 0.000 10.01

こんな感じで表示されれば大丈夫です。

最後に定期的に時刻合わせをするスクリプトです。

名前は適当に付けてください。

日に数回rootの権限でcronで呼べば良いでしょう。

ntpdateの接続先は変更して下さい。

chmod +x も忘れずに。

#!/bin/sh

#time adjust

kill `cat /var/run/xntpd.pid`

/usr/local/bin/ntpdate -b -s 133.100.9.2 > /tmp/ntp.log

/sbin/clock -w

/etc/rc.d/rc.xntpd

xntpdが動いているとntpdateでは時刻合わせが出来ません。

そこで一時的に止めて、時間を合わせてから再度起動しています。

clockコマンドはLinux独自の物で、リアルクロックへ時刻を書き込むコマンドです。

無くても支障無いですが、Linuxは起動時に一度リアルクロックから時刻を取得したら

リアルクロックを使わずに時刻を刻むようになっているので、他のOSも使うなら入れ

た方が良いでしょう。

これでおとなりさんにも時刻情報を提供できます。

うちはuucpを行う毎に福岡大学へ時刻合わせに行っています。

もちろん普段はタイムサーバですよ。

ついでにLANで繋がったマシンも全部時刻合わせしましょう。

Windowsマシンなら桜時計を入れれば合わせられますし、MacならOS8.5以降では標準で

時刻同期機能がついています。

 


最初へ戻る

inserted by FC2 system