Path: gama!etlcom!kusumoto
From: kusumoto@etlcom.etl.JUNET (Hiroyuki Kusumoto)
Newsgroups: fj.guide.admin
Subject: 9.2 news system adminstration: daily operation
Message-ID: <TEBIKI8811595511884@etlcom.etl.JUNET>
Date: 11 Feb 88 11:44:06 GMT
Expires: 28 Feb 88 00:00:00 GMT
Sender: kusumoto@etlcom.etl.junet
Reply-To: kusumoto@etlcom.etl.junet
Followup-To: fj.junet
Distribution: fj
Organization: Electrotechnical Laboratory, Tsukuba Science City
Lines: 160
Approved: fjnews@junet
Posted:  Thu Feb 11 11:44:57 GMT 1988


<1> 日常業務



 /usr/lib/news/log,errlog など、放っておくとどんどん分量が増えてゆくファイル
があります。わすれずにagelog をかけましょう。

 expire, sendbatch などは、いきなり crontab に書かずに、シェルスクリプトを介
して起動するようにしておいたほうがいいです。なにか変更するときにいちいち roo
t にならなくてもすみます。


 
 ファイルシステムが溢れていないか？ 
 ニュースがjunk に落ちていないか？ 
 news.software.b, fj.news.b などにバグレポート、  バージョンアップの情報は来
ていないか？ 
 /tmp にできる各種のロックファイル、/usr/spool/news の作業  ファイル（.araXX
XX とか、 .inaXXXX など）が残っていないか。 


などなど見張るべきことはたくさんあります。楽に管理するために、いくつか提案が
されました。



<1,1> メールで報告が来るようにする




(
cat errlog
agelog errlog 7
agelog log 7
expire ....... -v2  2>&1 |
sed -e '/^cancel <.*>$/d' -e '/^unlink .*[0-9]$/d' \
	-e '/^link [^ ]* to [^ ]*[0-9]$/d'
df
) | /usr/ucb/mail -s expire-report ニュースマネージャ


expire を直接 cron で起動するかわりに、このようなシェルスクリプトから起動し
ておくと、 
 	
 昨日どのようなエラーが起きたか 	
 ファイルシステムの残り具合はどうか？ 	
 expireの途中で、なにかエラーはおきていないか？ 
の報告がメールで毎日来ます。特に、自分がいつもログインしているのではないマシ
ンを管理するときに有用です。expire はいつも -v2 くらいの verbose モードで動
かすほうがよいです。



<1,2> expire の期間

ニュースの量にはむらがあります。たくさん来たときに大丈夫なように expire の期
間を設定すると、通常時にファイルシステムががらがらになってしまってもったいな
いのです。 expire を下のように起動すると、ある程度ニュースのトラフィックの変
動に対応できます。ここに示す例は、ニュースのために 10MB 割り当てているシステ
ムVのものです。（ブロックサイズが512 バイト）


:
PATH=/usr/lib/news:$PATH;export PATH
set `df|grep /usr`
if [ "$4" -gt 20000 ] ;then
	expire -e10 -E28 -v2
elif [ "$4" -gt 14000 ]; then
	expire  -e7 -E28 -v2
elif [ "$4" -gt 10000 ]; then
	expire -n comp,rec,misc,soc,talk,sci,control -e7 -E28 -v2
	expire -e14 -E28 -v2
elif [ "$4" -gt 5000 ]; then
	expire -n control,comp,news,sci,rec,soc,misc,talk -e5 -E28 -v2
	expire -e7 -E28 -v2
else
	expire -n control,comp,news,sci,rec,soc,misc,talk -e2 -E28 -v2
	expire -e4 -E28 -v2
fi
ここで、set `df|grep /usr` という行は、各計算機の、ニュースのスプールがある
パーティションを取るように変更する必要があります。System Vなら、\4 @G9,!" B
SD@@H!"\5 @N\%@I=<(N[	r;H	3HbG-^9!
これはあくまでも架空の例ですが、 
#!/bin/sh
PATH=/usr/lib/news:$PATH;export PATH
set `df /dev/ra2e`
capa=`expr "$5" : '\(.*\)%'`
if [ "$capa" -lt 70 ] ;then
	expire -e30 -E30 -v2
elif [ "$capa" -lt 80 ]; then
	expire  -e20 -E30 -v2
elif [ "$capa" -lt 90 ]; then
	expire -n comp,rec,misc,soc,talk,sci,control -e10 -E30 -v2
	expire -e14 -E30 -v2
elif [ "$capa" -lt 95 ]; then
	expire -n control,comp,news,sci,rec,soc,misc,talk -e7 -E30 -v2
	expire -e10 -E30 -v2
else
	expire -n control,comp,news,sci,rec,soc,misc,talk -e3 -E30 -v2
	expire -e7 -E30 -v2
fi
ここで注意が必要なのは、ヒストリのexpire 期間です。-e オプションで指定する記
事の保存期間は状況により可変にしてよいのですが、-E オプションで指定するヒス
トリの保存期間は固定で、しかも記事のexpire の期間（の最大値）よりも絶対に長
くなければなりません。



<1,3> expire の動き

  expireは、ひとしきりファイルをアクセスしたあと、メモリ上での処理を行ないま
す。ディスクアクセスが止まってしまって、expireが黙り込んでも、慌てないで待ち
ましょう。ハングアップしたと誤解してインタラプトをかけてしまうと、ヒストリが
壊れてしまいます。それから、ファイルシステムがあふれてヒストリがこわれたとき
など、 expire -r でヒストリを作ったあと、普通のexpire を行ないますが、 expir
e -r をバックグラウンドで走らせていたとき、本当に終わったかどうか、ps で確認
しましょう。ワークステーションを使っていると、なまじディスクアクセスが止んだ
のがわかるものだから、 expire -r が終わったと勘違いして expire を走らせる事
があります。こうなるとヒストリが完全に壊れてしまいます。



<1,4> ヒストリの再構成

 Bnewsシステムは、それぞれの記事について、メッセージID、到着の日時、ファイル
名に関するデータベースを持っています。また expireしてしまったものもしばらく
の間は、「この記事は過去に来た」ということを記録しています。これがヒストリで
す。

 BSDでは LIBDIR/history がそうです。ヒストリの検索を高速化するために、DBMラ
イブラリを使用しており、history.dir,history.pagというファイルがあります。

 システムVでは、LIBDIR/history.d/0, LIBDIR/history.d/1 ... LIBDIR/history.d/
9 という10のファイルに分散して入っています。これは、メッセージIDの1の桁でハ
ッシングされています。たとえば、 <1987@oopsvax.foo.junet> に関するヒストリは
、 LIBDIR/history.d/7 にあります。

 ニュースの受信中やexpireの途中にシステムダウンがあると、ヒストリ情報が壊れ
ることがあります。間違ってexpire を二つ同時に動かしてしまった場合や、ファイ
ルシステムが溢れた時は、ほぼ間違いなくヒストリ情報が壊れています。怪しいとお
もったら、また expire されてしかるべき古い記事がいつまででも残っている時は、
ヒストリを作りなおしましょう。ヒストリの再生は、expire の作業領域の分は、フ
ァイルシステムを空けてからやりましょう（さもないと、expire が失敗します）。
マニュアルには、expire -r -I -e 999999 -E 999999 と書いてありますが、これは
間違いです。（日付は秒で数えているのですが、 999999日だと、long int でも桁あ
ふれが起きるのです） expire -r I -e 999 -E 999 くらいで行ないます。（ -v2 も
つけておきましょう）

BSDなど、 DBM ライブラリのあるマシンでは、expire -R でもヒストリの再構成は行
なわれます。しかし、これは LIBDIR/historyからhistory.dir, history.pag を作っ
ているだけです。ファイルシステムがあふれた時など、LIBDIR/history そのものが
壊れている可能性があるときは、expire -R ではダメです。

expire -r だと、LIBDIR/active を手掛かりに、SPOOLDIR以下をスキャンし、ニュー
スの記事の中まで見て、受信途中のシステムダウンなどによって、空だったり、内容
が潰れている記事ファイルのチェックもしてくれます。ヒストリは完全に一から作り
なおされますので、過去に到着して expireしてしまった記事に関する記録は失われ
ます。
