トラブル対応と裏技
トラブルはつきものですが、対応法を知っていればじょぶじょぶだいじょぶ。
○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以降では標準で
時刻同期機能がついています。