ログファイル - みる会図書館


検索対象: UNIX MAGAZINE 2005年11月号
82件見つかりました。

1. UNIX MAGAZINE 2005年11月号

図 2 newsyslog コマンドの呼出し形式 newsyslog [-CFnrsv] [-R タグ名 ] [-a ディレクトリ ] [-f 設定ファイル ] [ ファイル . こなうかが決定されます。 コマンド行引数 92 と、この処理をおこなわなくなります。通常のデーモン・ スにシグナルを発行します。 -s オプションを指定する —s : newsyslog コマンドは、処理中にいくつかのプロセ 実行してもエラーが発生しなくなります。 とこの処理をおこなわないため、一一・般ユーザーの権限で が必要な処理も含まれます。 -r オプションを指定する syslogd プロセスへのシグナルの発行という root 権限 ようにします。 newsyslog コマンドの動作のなかには、 プログラムですが、一般ユーザーの権限でも実行できる —r : newsyslog コマンドは、本来は root 権限で動作させる よっ。 で、 UNIX では標準的なオプションといってもよいでし ョンを指定すると実行されるコマンドだけを表示するの 力します。 sh や make コマンドなどでも、一 n オプシ を実行したときにどのような処理がおこなわれるかを出 -n : 実際にログの入替えをおこなうのではなく、コマンド ます。 テムに障害が発生している状態のログなど ) に利用でき のログだけを取り出したいといった場合 ( たとえばシス の時点でログの入替えがおこなえるので、ある一一 - ・定期間 のローテーションを実施します。この機能を使えば任意 -F : このオプションを指定すると、強制的にログファイル ます。 い所有者やモードでログファイルを作成することができ ル中にはこれらの値も指定されているため、簡単に正し モードの設疋が必要ですが、後述するように設定ファイ ファイルを作成します。ログファイルの多くは所有者や いては後述 ) 、このログファイルがシステムにない場合に ァイルの設疋で C フラグが指定されており ( フラグにつ —C : 設疋ファイル newsyslog. conf に言されたログフ もちます。 っています。それぞれのオプションは、次のような未を newsyslog コマンドの呼出し形式は、図 2 のようにな プログラムはログファイルをオープンしたまま動作しま す。そのようなデーモン・プログラムが出力するログフ ァイルの場合、このオプションを指定すると、保存用の ログファイルは圧縮することができなくなります。 -v : 詳細情報出力モードにし、ログファイルの処理をおこ なった / おこなわなかったことなどを出力します。 v は verbose ( 冗長 ) に由来します。このオプションも多く のコマンドで実装されており、 UNIX の標準的なオプシ ョンといえます。 -R タグ名 : このオプションを指定するときには、かならず コマンドへの引数としてログファイル名も指定します。 この場合、前節で挙げた条件に関係なく指定されたログ ファイルのローテーションをおこないます。そして、ロ グファイルに書き込まれるメッセージにタグ名が含まれ るようになります。このオプションは、デーモン・プロ グラムがログを切り替えるために newsyslog コマンド を呼び出すケースを想定して作られたものです。この場 合にはシグナルを送る必要はないため、 -s オプションも 同時に指定します。 -a ティレクトリ : 保存のためのログファイル ( 以下、保 存ファイルと表記します ) は、とくに指定しなければア クテイプなログファイルと同じディレクトリに置かれま す。しかし、保存したいログファイルを 1 つのディレク トリにまとめ、そのディレクトリごとバックアップをと るような場合、保存するファイルの置き場所を指定でき ると便利です。このような場合には、一 a オプションを指 定することで、引数に指定したディレクトリにログファ イルを保存できます。 ー f 言又疋ファイル : このオプションを指定すると、デフォル トの設疋ファイルではなく、引数に指定したファイルを 設定ファイルとして使用します。一時的に異なる設定で 処理をおこないたい場合、システムのデフォルトの設疋 ファイルをいちいち変更しなくてもいろいろな設定が試 せるので便利です。また、定ファイルにかぎらす、オ プションの一部でファイルを才帛置する際にも一 f オプショ ンはよく利用されます。 なお、引数としてファイルを指定した場合には、指定さ UN 工 X MAGAZINE 2005 . 11

2. UNIX MAGAZINE 2005年11月号

グファイルに書き込みますが、ログがバイナリファイル だったり、厳密に決められた構文をもっていたりする場 合には、書き込んだ文字列カ源因で正しく口グファイル を利用できなくなってしまう可能性があります。このよ うな場合には、 B フラグを指定してメッセージが挿入さ れないようにします。 C : newsyslog コマンドに一 C オプションが孑彳定されたと きに、ログファイルがなけれは作成するように指示しま す。ログファイルを作成するには、言定ファイル内で C フラグが指定されており、さらに newsyslog コマンド の呼出し時に一 C オプションが指定されているという 2 つの条件を満たす必要があります。 D : このフラグが指定されているログファイルについては、 新しいログファイルを作成するときに UN-NODUMP フラグを付けてファイルをオープンするようになりま す。このフラグは dump コマンドカ坏リ用し、ファイルの バックアップが作られないように指示するものです。バ ックアップから復元したときに、旧いログファイルがあ っても仕方がないという配慮なのでしよう。 G : このフラグが指定されている行のログファイル名は正 式なものではなく、シェルのメタキャラクタを含む指定 であることを示します。したがって、 newsyslog コマン ドはメタキャラクタを展開し、マッチするすべてのファ イルについてローテーションの処理をおこないます。メ タキャラクタを使った指定は、 glob ライプラリを用いて 解釈されるため、指定可能なパターンについては glob ラ イプラリのマニュアルを参照してください。 J : このフラグが指定されると、 newsyslog コマンドは保存 ファイルを作成する際に bzip2 コマンドを使って圧縮を 試みます。圧縮コマンドとして bzip2 を利用するため、 システムに bzip2 コマンドがインストールされている必 要があります。 N : このフラグカ甘旨定されている行のログファイルを処理 したときに、どのプロセスにもシグナルを送る必要がな いことを示します。ログファイルを作成するプログラム によっては、ファイルをそのつどオープンするなど、ロ ーテーションが起こってもとくに処理を必要としないも のもあります。そのようなデーモンが出力するログファ イルであれば、このオプションを指定して、どのプロセ スにもシグナルを送らないようにします。 UN 工 X MAGAZINE 2005. 11 プログラミング・テクニック・ U : このフラグが指定されている場合、プロセス ID ファ イルにはプロセス番号ではなく、プロセスグループ番号 が内されていることを示します。このオプションを使 ってプロセスグループを指定する場合には、プロセス ID ファイルに格納されている値は負の数でなければなりま せん。 、 : J フラグや Z フラグが指定されているときに、圧縮 のためのプロセスが終了するのを待ってから次のログフ ァイルを処理するようにします。たとえば、 G フラグも 指定されている ( メタキャラクタを使っている ) 工ント リで、複数のログファイルにマッチする場合、このフラ グが指定されていないと、あるファイルを圧縮している 最中に別のファイルの圧縮が始まってしまうかもしれま せん。 W フラグを推定しておけば、最初のファイルの圧 縮処理カ鮗ってから次のファイルの処理に移るため、圧 縮をおこなうプロセスが同時に複数存在することがなく なります。 Z : このフラグが指定されると、 newsyslog コマンドは保 存ファイルを作成する際に gzip コマンドを使って圧縮 を試みます。圧縮コマンドとして gzip を利用するため、 システムに gzip コマンドがインストールされている必 要があります。 これでひととおり設定ファイルの書き方は紹介したの で、システムカ甘是供しているデフォルトの設疋ファイルの 内容をみてみましよう。前述したように、 newsyslog の デフォルトの設疋ファイルは /etc/newsyslog. conf です。 逐一紹介していくときりがないので、 こでは一部の行の みをとりあげます。最初は console. log ログファイルに関 する定です ( 図 3-a)0 この行では、ログファイルのパス名が /var/log/console . log であること、所有者やグループ名は省略しているので デフォルトの root : wheel が適用されること、ログファイ ルを作成する際のモードは 600 ( 所有者のみ読み書き可能 ) にすること、保存ファイルとして 0 ~ 5 の 6 つを保持する こと、ファイルのサイズが 100KB 以上になったときに 時間にかかわりなく口一テーションを実施することを指定 実際の設定例 95

3. UNIX MAGAZINE 2005年11月号

プログラミング・テクニック・ ァイルなので、 grep コマンドなどで直接内容を検索するこ とはできません。検索したい場合は、展開してから検索を 実行するか、圧縮に対応した検索コマンド (zgrep など ) を 使う必要があります。 ローテーションの様子 図 1 新規な成、 messages ー - ー messages. 0. bz2 messages. 0. bz2 ー 、 messages. 1 . bz2 messages. 1 . bz2 ー 、 messages. 2. bz2 messages. 2. bz2 ー ログのローテーション 、 messages. 3. bz2 messages. 3. bz2 ー 、 messages. 4. bz2 。ー。 g 。。・ 4 ・ b , 2 、名第更 さきほどの messages ファイルの場合、そのほかに mes- 、 messages. 5. bz2 messages. 5. bz2 ー sages. 0. bz2 から messages. 5. bz2 までのファイルがあり ました。これらの関係について説明しておきましよう。現 /etc/newsyslog. conf) に指定された方法で複数のログフ 在、実際に情報が追加されるアクテイプなログファイルが ァイル群のローテーションを実施します。ただし、実際 messages です。したがって、このファイルの中身が最新 にローテーションをおこなうかどうかは、設疋ファイルに となります。このファイルに情報を記録する前は、 mes- 書かれた条件をもとに判断します : 0 ーテーシンをおこ sages. 0. bz2 というファイルの中身が最新でした。その前 なうと判断した場合は、さきほと示したように / 四川 e. 0. は messages. 1. bz2 です。つまり、数字 : が大きな値のもの bz2 を / 四川 e. 1. bz2 に変更し、亜 / e の内容をん .0. ほど、旧い情報が内されたファイルとなっています。 bz2 に保存してん / e を空にするといった処理をおこな これらの旧い情報を格納したファイルは、作成されたと います。 きからずっと同じファイル名だったわけではありません。 こで紹介した例ではログを圧縮して保存しています 最初は messages ファイルとして情報を追加されていて、 が、圧縮するかどうかは設定ファイルで指定できます。圧 それがローテーションによって messages. 0. bz2 ファイル 縮する必要がなければ、 / 四川 e を logfile. 0 に保存するだ になり、次のローテーションによって messages. 1. bz2 に けです。また、圧縮コマンドとして bzip2 ( 拡張子が bz2) というふうに名前カ畯わっているのです。その なり・ を利用していますが、 gzip を用いた圧縮 ( 拡張子が (z) な ため、いつの時点でも messages が最新のファイルであり、 どにも対応しています。 直前のファイルが messages. 0. bz2 、その前のファイルが ログファイルのローテーションをおこなうかどうかを判 messages. 1. bz2 となります。 断する条件としては、 このようにして番号を増やしながらファイルを保存して いくと、やはりディスク容量がいくらあっても足りなくな ・ログファイルのサイズ ってしまいます。そこで、ログファイルの個数に上限を設 ・ログファイルの利用時間 け、もっとも旧いファイルから消していくという操作もお ・あらかじめ決められた時刻 こなわれています。つまり、 messages. 5. bz2 というファ の 3 通りのパターンがあります。 イルは、ローテーション操作をおこなうと別のファイルに ログファイルのサイズを指定した場合、 newsyslog コマ 名前カ畯更されるのではなく、ファイル自体力導」除されま ンドを実行したときにログファイルが指定されたサイズを す ( 図 1 ) 。 超えていれば、ローテーション処理がおこなわれます。ロ グファイルの利用時間が指定された場合、最後にログファ イルのローテーション処理を実施してから指定された時間 が過ぎているかどうかカべられ、過ぎていればローテー このログファイルのローテーションをおこなうために ション処理がおこなわれます。あらかじめローテーション 処理をおこなう時刻が決められている場合、コマンドが起 用意されているコマンドが newsyslog です。 newsys- 10g コマンドは、後述する設疋ファイル ( デフォルトでは 動された時刻が指定時刻を過ぎているかどうかで処理をお newsyslog コマンド 91 UNIX MAGAZINE 2005 . 11

4. UNIX MAGAZINE 2005年11月号

図 3 /etc/newsyslog. conf ( 一部 ) /var/log/console .10g /var/log/maillog /var/log/weekly ・ 10g 図 4 /etc/crontab の newsyslog に関する言又疋 100 9T00 $W6D0 1 JN ・ ロ ) 「ー 5 0 0 0 0 4 4 ( 0 ( 0 ( 0 newsyslog て 00t しています。また、 J フラグが指定されているのでローテ 実施されません。 このログファイルもシステム上には存在しませんが、 pe- ーションの際には bzip2 圧縮を試みます。 riodic コマンドによって作成される可能性があります。 ところが、ファイルシステム上に /var/log/console. log periodic コマンドの設定ファイルである periodic. conf というファイルはありません。 /etc/syslog. conf ファイ ファイルのなかに、 /var/log/weekly. log ファイルへ出力 ルを見ると、このログファイルに関する指定行はコメント を変更する例が書かれています。 periodic コマンドはデー アウトされています。実際にはファイルシステム上にない モンとして動作するのではなく、指定されたコマンドを実 ログファイルを設定ファイルで指定している点が気になる 行すると periodic 自身が終了してしまいます。そのため、 かもしれませんが、 newsyslog コマンドは設疋ファイルに ログファイルをオープンし続けているプロセスがあるわけ 指定されているログファイルのうちファイルシステム上に ではないので、シグナルを送る必要がありません。そこで、 存在するものを処理対象とするので、このようなエントリ 図 3-c の行では、 N フラグも指定することでよけいなシグ があってもなんら問題はありません。 ナルが発行されないようにしています。 続いて、 maillog ログファイルに関する設疋をみてみま しよう ( 図 3-b)0 この行では、ログファイルのパス名が / var / 10g / mai Ⅱ og newsy 引 og コマンドの起動 であること、所有者やグループ名は省略しているのでデフ ォルトの root :wheel が適用されること、ログファイルを newsyslog コマンドは、デーモンとして動作するわけで 作成する際のモードは 640 ( 所有者のみ読み書き可能で、グ はありません。コマンドを起動した時点で、ログファイル ループは言囚みのみ可能 ) にすること、保存ファイルとして をローテーションすべきかどうかを判断して処理をおこな 0 ~ 7 の 8 つを保持すること、ファイルのサイズにかかわ うプログラムです。ここで問題になるのは、誰が newsys- りなく、毎日深夜 0 時にローテーションを実施することを log コマンドを実行するかです。 指定しています。時刻指定の、、@T00 " は、、、 $ D00 " でもま UNIX では、定期的にコマンドを実行するための cron ったく同じ意味になります。また、 J フラグが指定されて デーモンがあるので、これに任せるのが一般的でしよう。 いるのでローテーションの際には bzip2 圧縮を試みます。 FreeBSD の場合にも、 cron から定期的に起動されるよ このファイルは実際に作成されていて、保存ファイルを うに、 cron デーモンの設疋ファイルである /etc/crontab みると毎日深夜 0 時に保存されていることが分かります。 に書かれています ( 図 4 ) 。 もう 1 つ、 weekly. 10g ログファイルに関する設疋をみ この行だけを見てもよく分からないかもしれませんが、 これは、、毋時 0 分に root 権限で newsyslog コマンドを てみましよう ( 図 3-c)0 実行する " という指定です。つまり、 1 時間に 1 回、 new- 前半部の指定については、ト述の例と同様なので省略し syslog コマンドが実行されるわけです。 ます。この指定行で特徴的なところは、日時とサイズの両 ここで気になるのは、これだけでは時刻指定でのログの 方を指定している点です。日時の指定は、、 $ W6D0 " とな ローテーションが正しくおこなえないという点です。たと っていますから、毋週土曜日の午前 0 時にローテーション えば、ログのローテーション時刻として 9 時 30 分が指定 をおこなうことを指定しています。ただし、サイズとして されていたとしても、この時刻には newsyslog コマンド IKB が指定されているので、指定時刻になってもファイル は動作しないため、ローテーションがおこなえないことに のサイズが IKB を超えていなければ、ローテーションは 0 96 UNIX MAGAZINE 2005. 11

5. UNIX MAGAZINE 2005年11月号

れたファイルについてのみ処理をおこないます。引数が指 定されなかった場合には、設疋ファイルに書かれたすべて のファイルを処理します。そのため、通常は引数でファイ ルを指定するのではなく、処理したいファイルを設疋ファ イルに列挙するかたちになるでしよう。 newsyslog. conf newsyslog コマンドへの指定を記述する設疋ファイル は、デフォルトでは /etc/newsyslog. conf です。このフ ァイルは、 1 行が 1 つのログファイルに対する指定となっ ており、各行にはそれぞれのログファイルをどのように扱 うかカ第杢されています。なお、コメントは # に続けて記 述します。ほかの多くの言定ファイルと同様、 newsyslog. conf ファイルでも # から行末までがコメントとみなされ、 内容が無視されます。 # をコメント記号ではなく雹凾の文 字として使うには、前に、、 \ " を付けます。 1 行は空白文字で区切られた以下の 9 つのフィールドか ら構成され、次に示す順番で謎杢します。 ログファイル名 : この行の処理対象となるログファイルの パス名を指定します。特殊なパス名として <default> があり、これを指定した場合は newsyslog コマンドの 引数として設疋ファイル内で明示的に指定されていない ログファイルが指定されたときに、この行の指定力陏効 になります。このフィールドは必顎のフィールドです。 所有者 : ログファイルや保存ファイルの所有者とグループ を、、 : " で区切って指定します。以前のバージョンとの互 . も区切り文字として使えます。どち 換性のために、 らか一方だけ指定すれば十分な場合には、指定力坏要な 所有者やグルーフ名は省略できますが、 : はかならす残し ておかなければなりません。このフィールドか所有者フ ィールドかどうかを、この文字で判断するからです。所 有者やグループの指定には、 /etc/passwd ファイルに 書かれている名前や UID 、 /etc/group ファイルに書 かれているグループ名や GID を使います。このフィー ルドは省略可能なフィールドです。 モード : ログファイルや保存ファイルの作成モードを 8 進 数で指定します。 す。 このフィールドは必須のフィールドで UNIX MAGAZINE 2005 . 11 プログラミング・テクニック・ 93 省略した場合は、以降のすべてのフィールドを省略しな このフィールドは省略可能なフィールドです。ただし、 します ( 彳あ ) 。 として、、、 BCDGJNUWZ " の文字を組み合わせて指定 フラグ : ログファイルの処理方法を指示するためのフラグ ドは必顎のフィールドです。 てのみ処理が決定されるようになります。このフィール かどうかが決定されます。すなわち、サイズにもとづい を指定することで日付や時刻に関係なく処理をおこなう の指定力坏要な場合には、サイズフィールドと同様に * のみローテーションが実施されます。また、時間や時刻 両方を指定した場合は、両方の条件カ填になったときに われます。サイズフィールドと時間・時刻フィールドの 場合には両方の条件を満たしたときにのみ処理がおこな 時間指定の後ろに時刻指定をつなげることもでき、この て、ローテーションをおこなうかどうカ功ゞ決定されます。 ているか、または指定された日時になったかカべられ ローテーションを実施してから指定された期間カ釜過し 場合、 newsyslog コマンドが実行されたときに、最後に に時刻を指定します。これらの指定がおこなわれている くは日 / 週 / 月に 1 回といった指定であれば $ 記号の後ろ 刻の場合には、 @記号の後ろに時刻を指定するか、もし は 10 時間おきにローテーションがおこなわれます ) 。時 位で数値を指定します ( たとえば、、、 10 " を指定した場合 ーションするタイミングを指定します。これは、時間単 時間・時刻 : このフィールドには、ログファイルをローテ です。 * を指定します。このフィールドは必須のフィールド ァイルのサイズを利用しない場合、このフィールドには されます。ローテーションするかどうかの決定にログフ 指定されたサイズ以上であれば、ローテーションが実施 マンドの実行時に、当該ログファイルの大きさがここで の最大サイズを KB 単位で指定します。 newsyslog コ 実施するかどうかを決定する場合に、このログファイル サイズ : ログファイルのサイズによってローテーションを 必顎のフィールドです。 ファイルカられることになります。このフィールドは まるため、 5 と指定するとログファイルも含めて 7 つの の数を推定します。ただし、ファイルの番号は 0 から始 ファイル数 : ログファイルのほかに作成する保存ファイル

6. UNIX MAGAZINE 2005年11月号

ロプログラミンク・テクニック 多治見寿和 newsyslog 前回まで、 syslog システムについて説明してきました。 プログラム中から利用するためのライプラリ関数群や、コ マンド行からメッセージを送るための logger コマンドな どを紹介し、デーモンとして動作する syslogd についても 説明しました。これで syslog システムの主要な部分は解 説したので、ほかの部分に移りましよう。今回は、 syslog システムの一部ではありませんが、深い関連のある new- syslog プログラムをとりあげます。 ローテーション syslog システムを利用する際には、ログのローテーショ ンがたいへん重要になります。、、ローテーション " という と、野球の先発投手のローテーションを思い浮カべる人が 多いかもしれません。あるいは、乗用車のタイヤのローテ ーションでしようか。先発投手のローテーションは、何人 かの先発投手を順番に試合に登板させることで、安定した 戦力を確保しようとするものです。怪我などで先発投手が 足りなくなると、ローテーションの谷間ができて戦力的に 厳しくなってしまいます。一方のタイヤのローテーション は、タイヤの偏った減り方を避けるために、適宜タイヤを 入れ替える作業のことです。以前はスペアタイヤを含めた 5 本のタイヤでローテーションしていたのですが、最近は タイヤに向きがあったりスペアタイヤに異なるものを用意 したりするので、前後の 2 本ずつでローテーションをおこ なうようです。いずれの場合も、、、ぐるりとまわす " といっ た未になります。 ログのローテーションも基本的には同じような意味で、 ログファイルをぐるりと入れ替える作業をこう呼んでいま 90 す。たとえば、数多くのログファイルが置かれる / var / I 。 g ディレクトリを見てみてください。 messages というログ ファイルがあると思いますが、そのほかに messages. 0. bz2 や messages. 1. bz2 など、、、 messages" で始まるいくつか のファイルが置かれているはずです。これらのファイルは ローテーションの結果作成されたものです。 1 つのログファイルに情報を書き込んでいくと、ファイ ルのサイズはだんだん大きくなります。あまりに大きくな りすぎたファイルは取扱いが面倒です。 less などのページ ャコマンドで内容を表示するときも、目的の位置に到達す るのが困難になってしまいます。さらに、すべてのログを 保存しておくと、ディスク領域がいくらあってもいずれは 一杯になってしまうでしよう。 そこで、通常は一定の分量 ( もしくは期間 ) ごとにファイ ルを分割し、ログファイルのサイズが巨大にならないよう にします。さらに、旧いログファイルは圧縮するなどして、 ディスク領域を無駄に消費しないようにするのが一般的で す。さきほどの messages. 0. bz2 などのファイルは、分割 した以前の messages ログファイルを、圧縮して保存して いたものなのです。 ファイルが圧縮されていると、内容を確認するのが面 倒になると考えるかもしれませんが、心配は無用です。最 近のページャコマンドは賢いので、圧縮されたテキストフ ァイルを引数として指定した場合には、展開したうえで表 示してくれます。ためしに、 messages. 0. bz2 ファイルを less コマンドの引数に指定すると、ちゃんと内容が見える ことが分かるでしよう。そのため、圧縮されていることは あまり意識しないかもしれません。ただし、 less コマンド を使って内容を確認することはできますが、圧縮されたフ UNIX MAGAZ 工 NE 2005 . 11

7. UNIX MAGAZINE 2005年11月号

ければなりません。フラグフィールドを省略したいがそ の後ろのフィールドは利用したい場合には、フラグフィ ールドが省略されていることを示すために一を指定し ます。 プロセス ID ファイル : ログファイルを生成するプログラ ムのなかには、ファイルを移動したり名前を変更したと きに、プログラムへの通知が必要なものもあります。 のような場合にはシグナルを使って通知しますが、その 際にシグナルを送るプロセスを指定しなければなりませ ん。このプロセスのプロセス番号が書かれたファイルを 指定するのがこのフィールドです。多くのデーモン・プ ログラムは /var/run ディレクトリなどに自身のプロセ ス番号を記したファイルを残して動作するので、これら のファイルを指定することになります。このとき、かな らず絶対パスで指定する、つまり / から始まっている必 要があるので注意してください。なお、 U フラグが指定 されている場合、ファイルに書かれた値はプロセス番号 ではなくプロセスグループ番号として解釈されます。 このフィールドは省略可能なフィールドです。このフィ ールドが省略されていて、 N フラグが指定されていない 場合には、 syslogd プロセスにシグナルが送られます。 シグナル番号 : プロセスにシグナルを送る場合、どのシグ ナルを送るのかをシグナル番号で指定します。このフィ ールドは省略可能なフィールドです。省略すると SIG- HUP シグナルカ駛われます。注意してほしいのは、シ グナル番号で指定しなければならない点です。上では SIGHUP シグナルと書きましたが、フィールドの値と して、、 SIGHUP" のようなシンポルは指定できません。 SIGHUP であれば 1 など、 /usr/include/sys/signal. h で規定されている数値を指定してください。 時刻指定フォーマット 時間・時刻フィールドに時間を指定する場合には、たん に数値を指定すればよいので簡単ですが、時刻を指定する 場合はフォーマットが決まっています。時刻の指定には@ を使う方法と $ を使う方法の 2 通りがあるので、両方につ いて紹介しておきましよう。 @ を使って時刻を指定する場合、 @の後ろに指定する形 94 式は次のように決まっています。 C[[[Ccc]yy]mm]dd] CTChhCmmCss]]]]] それぞれ、前から順に cc か西暦の上 2 桁、 yy が西暦の 下 2 桁、 mm が 2 桁で表した月、 dd が 2 桁で表した日、 hh が 2 桁で表した時、 mrn が 2 桁で表した分、 ss が 2 桁で表した秒となっています。角括弧は省略可能を意味す るので、たんに 10 と書けば 10 日が指定されたことになり ます。 それぞれの項目が省略された場合、 T より前、つまり日 付に関しては現在の日付が指定されているものとみなしま す。 T より後ろ、つまり時刻に関しては 0 時 0 分 0 秒が 指定されているものとみなします。したがって、毎月 5 日 の午前 3 時に処理をしたい場合には、、、@05T03 " と指定 すればよいことになります。 一方、 $ を使った方法は、毎日、周、毎月といった指定 を簡単に謎するためのものです。こちらは、毎日、毎週、 毎月カそれそれ次のような形式となっています。 CDhh] [Ww CDhh] ] [Mdd [Dhh] ] dd は 1 ~ 31 日を、 hh は 0 ~ 23 時を、 w は 0 ~ 6 で曜 日を指定します。曜日の 0 は日曜を表し、 5 が金曜になり ます。また、 dd には、、 L " または、、にを指定することがで き、この場合にはその月の最後の日を表します。 $ を使った指定の多くは@ を使った指定でも表記するこ とができますが、毎週や毎月の最終日といった形式は@ を 使った方法ではうまく指定できないため、これらの日付を 指定したい場合には $ を用いる形式を使う必要があります。 フラグフィールド newsyslog. conf に言当する指定行の 7 番目のフィール ドであるフラグフィールドには、、、 BCDGJNUWZ" の文 字を組み合わせて指定します。ここでは、それぞれの文字 を指定したときにどのような動作をするのかを紹介してお きましよう。 B : ログファイルにローテーションをおこなったというメ ッセージを挿入しなくなります。通常、 newsyslog コマ ンドはログをローテーションしたことを示す文字列を口 UNIX MAGAZINE 2005 . 11

8. UNIX MAGAZINE 2005年11月号

なります。 じつは newsyslog コマンドは、指定された時刻を厳密 に守るわけではなく、 1 時間の幅をもたせて処理をおこな っています。 newsyslog コマンドが起動されると、現在 時刻から過去 1 時間のあいだに実行すべきだった時刻指定 のローテーションを実施します。 cron が正しく動作しな いなど、なんらかの都合で指定された時刻から 1 時間以内 に newsyslog コマンドか勠作していなかった場合、実行 すべき時期を過ぎてしまったことになります。この場合に は、無理にローテーションを実施しません。さらに、 -v オ プションが指定されていれば、次の実行がいつになるかを 表示して処理を終了します。 個人での利用 newsyslog コマンドはシステム全体で利用することを 前提に作成されていますが、個人で利用することもできま す。システム全体にインストールする権限はもっていない が、継続して動かしたいプログラムがあり、そのプログラ ムの出力するログを保存しておきたいといった要求は比較 的多いと思います。この場合、適切にログファイルをメン テナンスしないと巨大なファイルになってしまうこともし ばしばです。このような状況では、 newsyslog コマンドを 個人的に利用するとよいでしよう。 newsyslog コマンドを個人的に利用するには、まずシ ステムの設疋ファイルとは別に、個人用の設疋ファイルを 作成します。このとき、一から作成すると形式を間違える 可能性があるので、システムの設疋ファイルをコピーして 編集すれば、比較的楽に正しい形式のファイルを作ること ができます。ファイルのエントリを作成する際には、ログ ファイルの位置や ( もしあれば ) プロセス番号が書かれた ファイルの位置などに注意して編集してください。シグナ ルカ坏要であれば、 N フラグを設定しておきましよう。ま た、所有者やグループを自分カえる範囲のものに変更し ておくのも忘れないようにしてください。 コマンドを定期的に実行するには、やはり cron コマン ドを使います。ただし、システム全体の設疋ファイルであ る /etc/crontab にエントリを追加することはできないの で、 crontab コマンドを使って個人用のエントリを追加 UNIX MAGAZINE 2005. 11 プログラミング・テクニック・ します。追加するエントリは、 /etc/crontab に書かれた newsyslog のエントリとほば同じものを言します。 ただし、注意しなければならないのは、個人用に new- syslog コマンドを起動するため、オプションが必要になる 点です。個人の権限でコマンドを起動するため、 -r オプシ ョンを指定する必要があります。このオプションを指定し ないと、 root 権限のないユーザーは newsyslog コマンド を起動することもできません。 また、実際に cron に組み込んで動作させる前に、正し く処理できるかどうかを確認する必要もあるでしよう。そ のためには、 newsyslog コマンドに一 n と -v オプションを 指定して実行し、その出力からどのような処理がおこなわ れるのかを確認します。この仮実行で正しく動作すると分 かってから cron に組み込むようにしましよう。 ☆ 今回は、 syslog システムをサポートするコマンドとして、 newsyslog コマンドの概要や使い方などを紹介しました。 ファイルをローテーションしていくという考え方はログフ ァイルにのみ有効なわけではないので、個人で利用する場 合にはもっと実用的な使い方もあるかもしれません。その ような利用法もぜひ考えてみてください。 次回はソースコードをみていきますが、今回は曖味にし てきた、、なぜ syslog には HUP シグナルが必要なのか " に ついても触れたいと思います。 97 ( たじみ・ひさかす )

9. UNIX MAGAZINE 2005年11月号

連載 / ネットワークとセキュリティ 図 3 作成されたログファイルの内容 $ cat tokyo .20050915.041511 く一 く一 RCS file : /var/rancid/CVS/t0kyo/configs/tokyo . jp ・ example . net ,v cvs add: use ' cvs commit ' tO add this file permanently cvs add: scheduling file ( t0kyo ・」 p ・ example . net ' for addition starting: Thu Sep 15 04 : 15 : 11 JST 2005 done Checking in tokyo ・ jp ・ example . net ; /var/rancid/CVS/tokyo/configs/t0kyo ・ jp ・ example . net ,v initial revision: 1 . 1 done Added tokyo . jp ・ example . net Trying t0 get a11 0f the configs . A11 routers sucessfully completed. cvs diff: Diffing cvs diff : Diffing configs CVS commit : Examining CVS commit : Examining configs Checking in router . db ; /var/rancid/CVS/t0kyo/router. db , v く一 new reviSion: 1 . 2 ; previous revision: router . db 1 . 1 Checking in configs/tokyo ・ JP ・ example . net ; /var/rancid/CVS/tokyo/configs/t0kyo . jp. example . net ,v tokyo ・ jp ・ example . net tokyo ・」 p ・ example . net new revision: 1 . 2 ; prevxous revision: 1 . 1 ending: Thu Sep 15 04 : 15 : 27 JST 2005 $ /usr/local/rancid/bin/rancid—run rancid-run コマンドの実行には、対象とするネットワー ク機器の数にもよりますが、数分程度はかかります。気長 に待ちましよう。 rancid-run の実行が完了すると、 /var/ rancid/logs ディレクトリに 、 tokyo. 20050915.041511 のような名前をもっログファイルが作成されます。ログフ ァイルには、実行時刻と CVS の出力などが記録されて いるので、念のため内容を確認しましよう ( 図 3 ) 。なお、 router. db に何も機器が定義されていない場合は、開始時 刻と終了時刻だけカ第己録されます。 RANCID の関連ファイルのパス名を表 2 にまとめまし = ル宀 cron の又疋 RANCID が正常に動作することを確認したら、今度は RANCID を定期的に実行するために cron を設定します。 40 それには、ユーザー rancid で crontab を編集します。 $ crontab —e これで RANCID の言は完了です。翌朝から、ラ月的 履歴情報には影響しません。 分に過去の実行口グを削除します。 CVS リポジトリ内の るように言定しました。 2 行目の定により、毎朝 5 時 40 機器に負荷がかかるため、利用者の少ない時間帯に実行す するようにします。設定情報を取得すると、ネットワーク 1 行目の設定は、毎朝 5 時 10 分に RANCID を実行 —type f —mtime + 2 —exec rm { } \ ; 40 5 * * * /usr/bin/find /var/rancid/logs - 10 5 * * * /usr/local/rancid/bin/rancid—run て、終了します。 テキストエデイタが起動したら、以下に示す行を言当し UNIX MAGAZINE 2005 . 11 ネットワーク機器で構成変更がおこなわれた場合には、 に実行されるようになります。

10. UNIX MAGAZINE 2005年11月号

表 2 RANCID の車ファイルのバス名 / ヾス名 var/rancid/. cloginrc /var/rancid/logs /var/rancid/ グループ名 /configs/ 機器名 /var/rancid/ グループ名 /router. db /usr/local/rancid/bin /usr/local/rancid/share /usr/local/rancid/man /usr/local/rancid/etc 連載 / ネットワークとセキュリティ 表 1 対応 ログイン・スクリプト ルータ GNU Zebra ルーティング・ソフトウェアか稼動するホスト ータ 訝リ alteon baynet cat5 CISCO CSS enterasys erx ext reme forcel() foundry hitachi hp jumper mrtd netscalar netscreen red back rlverstone t nt zebra 詳細 Foundry Networks のルータ、スイッチ ()P Procurve HP9304M など OEM 含む ) Force10 Networks のルータ Extreme Networks のスイッチ Juniper Networks E シリーズエッジルータ riverstone の別名 Cisco Content Services Switch IOS の不知カーす - る Cisco Systems のルータ、スイッチ /PIX CatOS の稼動 - す - る Cisco Catalyst スイッチ Nortel ( 旧 Bay Networks) のルータ NorteI ( 旧 Alteon) の WebOS スイッチ Riverstone/Enterasys ( 旧 Cabletron) の NAS ( 9.0.3 以降 ) 、 Redback のルータ、 NAS など Juniper Netscreen Firewall Netscalar ロードノヾランサー MRTd デーモンをカづーるホスト Juniper Networks のルータ HP Procurve スイッチ ( 2524 、 4108 など ) HITACHI (Alaxala) のルータ Lucent TNT alogi n blogin clogin clogin clogin clogin tntlogin rivlogin clogin nlogin nslogin clogin jlogin hlogin ht 10g ⅲ flogin clogin clogin clogin rivlogin 概要 RANCID 本体の設疋ファイル マニュアルページ群 プログラムから呼び出されるファイル群 実行ファイル群 対象ネットワーク機器の設疋 ネットワーク機器の設疋ファイル RANCID の動作ログ ネットワーク機器の自動ログインの設疋ファイル ットワーク機器の構成情報を格納するディレクトリに移動 します。 $ cd /var/rancid/tokyo こでは、さきほど定義した tokyo グループの誌定をお こないます。 そして、 router. db ファイルに対象機器の情報を定義し UNIX MAGAZINE 2005 . 11 tokyo ・ jp. example. net から設疋を取得するには、 となっています。たとえば、 Cisco IOS カ材家動するル 機器名 : 機器種別 : 状況 [ : コメント ] router. db の書式は、 $ vi router . db ます。 tokyo ・ JP ・ example . net:cisco:up:=> ExampIeNet TOkyo Router とします。 表 1 に、対応機器の情報をまとめました。 、、状況 " は、機器の状況を設定します。 RANCID は、状 況が、、 up " の場合にはリモートの機器から設定を取得しま すが、、、 d 。 wn " の場合には設疋の取得をスキップします。 最後のフィールドはコメント項目になっています。この 項目のは任意で、動作に景彡響はありません。 言又疋のテスト router. db の作成が終ったら、 rancid-run コマンドを 実行し、ネットワーク機器から正しく構成情報を取得でき るかや、 CVS への登録ができるかをチェックします。 39