指定 - みる会図書館


検索対象: 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月号

連載 / ネットワークとセキュリティ ログインする方法です。 UNIX での、 root 権限で直接ロ もう 1 つは、 privilege 15 で作成されたユーザーとして る方法に似ています。 般ユーザーでログインしたあと、 su コマンドで root にな ドで管理者権限を取得する方法です。 UNIX でいえば、 ユーザーでネットワーク機器にログインし、 enable コマン は、大きく分けて 2 種類の方法があります。ます、通常の Cisco IOS で設疋ファイルをコピーする権限を得るに IOS でのユーザーの権限 ーザーを作成し、ユーザーの権限を限定したほうがよいで 塞化するとともに、ネットワーク機器に RANCID 専用ュ スクをともなうため、 RANCID を稼動させるホストを要 ただし、ファイルのなかにパスワードを言するのはリ ぬきだして、ファイルを解読して盗むことができてしまう」 なら、 fetchmail のコードそのものから必要なデコーダを まず、シェルのユーザーを rancid に変更します。 ・ cloginrc の具体的な設疋について説明します。 ・ cloginrc の言又疋 グインする方法に似ています。 # su ー rancid イレクテイプ " については彳します。 で、各項目のあいだはスペースで区切られています。 add ディレクテイプネットワーク機器名オプション . cloginrc の基本的な書式は、 続いて、 . cloginrc の設疋をおこないます。 $ chmod 600 ~ / . cloginrc ないよう、パーミッションを 600 に設疋します。 ほかのユーザーからパスワードを含むファイルを読まれ $ touch ~ / . cloginrc 空の . cloginrc ファイルを作成します。 ワーク機器に同じ設定を適用したい場合には、 * を指定し ルドカード ) を指定することもできます。すべてのネット あるいは IP アドレスを指定します。ここには、、、 * " ( ワイ 、、ネットワーク機器名 " には、 DNS で参照できるホスト名、 36 ます。 さらに、ワイルドカードを部分的に適用することもでき ます。たとえば、次のようなホスト名をもつネットワーク 機器群に対して、、 *. jp ・ example. net" を指定することで、 tokyo. jp. example. net と osaka. jp. example. net のみを 対象とした言定がおこなえます。 tokyo ・ jp ・ example . net osaka ・ jp ・ example . net sanjose . us . example . net 各ティレクテイプについて こでは . cloginrc の各ディレクテイプについて説明し ます。 add password ネットワーク機器名 VTY / ヾスワード enable パスワード ネットワーク機器にログインするための VTY パスワー ドと、管理者権限を取得するための enable パスワードを 指定します。 例 : add password Router1 zokko Crysta1 add user ネットワーク機器名ユーザー名 ネットワーク機器にログインする際に利用するユーザー 名を推定します。なお、 user ディレクテイプでユーザー名 を明示的に指定しない場合、 $USER 環境変数の値カ用 されます。 例 : add user Router1 Ciscorn add method ネットワーク機器名 {ssh} [. ネットワーク機器に接続する方式と順序を指定します。 対応している方式は、 ssh 、 telnet 、 rsh です。デフォル トでは telnet で接続を言し、接続できなかった場合には さらに ssh で言于します。 例 : add method * ssh telnet この例では、まず ssh でコネクションカ蔀寉立できるかを 言し、失敗した場合には telnet を用います。本当は ssh を使いたいが、一・・部の機器が telnet にしか対応していない 環境を想定しています。 add autoenable ネットワーク機器名 1 または 0 ネットワーク機器にログインした際、すでに管理者権限 となっているかどうかを指定します。 Cisco IOS におい て、 privilege 15 で作成されたユーザー名を用いてログイ UNIX MAGAZINE 2005 . 11

3. 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

4. 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

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月号

図 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

7. 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

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月号

連載 / ネットワークとセキュリティ ンする場合、値を 1 にします。 例 : add autoenable Router1 1 UNIX MAGAZ 工 NE 2005 . 11 3 http://www.rodneyfun.corn/char.com/.cisc.htm mag" というユーザー名で privilege 15 権限のユーザー 次に、 IP アドレスが 192.0.2.3 のルータ上に、、、 unix- add password 192.0.2.1 Z0kk0 Crysta1 add user 192 . 0 . 2 . 1 Ciscorn $ vi ~ / . cloginrc を示します。 う設疋 3 のネットワーク機器に自動ログインするための例 ワードが、、 zokko " 、 enable パスワードが、、 Crystal" とい corn" という名前で一般ユーザーが作成されており、パス まず、 IP アドレスが 192.0.2.1 のルータ上に、、、 Cis- 言例 $ man —M /usr/local/rancid/man 5 cloginrc を参照してください。 その他の書式については、 cloginrc ( 5 ) の man ページ 指定します。 ほかのファイルから設疋を読み込む場合、ファイル名を include ファイル名 デフォルト値 : " ( \ [pp] asswordl passwd) : プトを指定します。 ネットワーク機器がパスワードの入力を要求するプロン ロンプト add passprompt ネットワーク名 / ヾスワード・プ テフォルト値 : " (Username は ogi ー user name) : RANCID はユーザー名を送信します。 プトを指定します。ここで指定された文字列が現れたら、 ネットワーク機器がユーザー名の入力を要求するプロン ンプト add userprompt ネットワーク機器名ユーザー名プロ 例 : add cyphertype Router1 3des フォルトでは 3des が指定されます。 SSH で利用する引ヒアルゴリズムを指定します。デ ズム add cyphertype ネットワーク名暗号イヒアルゴリ 『エンジニア必携スキルが身に付く 新志 oftware esugn 特集 ここがポイント ! , 第 1 弾い 突破記念特大号 発刊 15 周年 特別定価 ( 税込 ) 1 , 390 円 B5 判・ 224 ページ 37 血技術評諞社 http://www.gihyo•co.jp/ お買い求めください . 全国の書店 , または弊社ホームページで 好評発売中 ! ! ほか 記念特集過去・現在ヨ ( Wind 。 ws 版検索機能付きほか [ PDF 版 1 アーカイプダイェスト 2004 Software Desi n D - RO について解説します . 向け / 内向けを意識した効果的なネットワークシステム運用 本特集では , この DNS と P 「 oxy にフォーカスを当てて , 外 た最近注目されている SSLVPN を実現することができます . とで , トラフィックの制御やコンテンツフィルタリング , ま めに有効なのが Proxy サーバです . P 「 oxy サーバを利用するこ を構築する際に効率的かっ安全なネットワーク運用をするた バを狙ったクラッキングなども発生しています . また , LAN レベルではほとんど意識しない一方で , 最近では DNS サー サーバです . 通常は目に見えない形で動作しており , ユーザ インターネットサーバを立てる際 , 最も重要なのが DNS の立て方 , 使い方 DNS & キャッシュサーバ

10. UNIX MAGAZINE 2005年11月号

図 2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 連載 / UN Ⅸ便利帖ー 0 com.apple ・ periodic-daily. plist く ?xml version="l . 0 " encoding="UTF—8"?> く !DOCTYPE list PUBLIC "—//App1e Computer//DTD PLIST 1 . O//EN" "http: ル 000.0PP10. com/DTDs/propertyList—1.0.dtd"> く plist version="l .0"> く dict> く key>Labe1 く /key> く string.com ・ apple . periodic¯daily く /string> く key>ProgramArguments く /key> く array> く string>/usr/sbin/periodic く /string> く /dict> く /plist> く /dict> く integer>15 く /integer> く key>Minute く /key> く integer>3 く /integer> く key>Hour く /key> く dict> く key>StartCa1endarInterva1 く /key> く integer>l く /integer> く key>Nice く /key> く true/> く key>LowPriorityIO く /key> く /array> く string>daily く /string> 設疋ファイルのポイントです。この例のように true" に しておくと ( 12 行目 ) 、 launchd はこの設疋ファイルを読 み込んだときに、そのプロセスを起動します。 WatchPaths ( 13 ~ 16 行目 ) および QueueDirecto- ries ( 17 ~ 20 行目 ) では、パス名の配列を指定します。 ここに書かれたファイルやディレクトリに変化があると、 launchd はこのプロセスを再起動します。両者の違いは、 WatchPaths ではそこに書かれたパスに変化があればプ ロセスが起動するのに対し、 QueueDirectories はそのデ ィレクトリが空でなければプロセスが起動する ( ディレク トリカ啌なら起動しない ) という点です。 以上のことから、図 1 の設疋ファイルが launchd に ⅱ冗 み込まれると、すぐに cron が起動され、その後は / etc / crontab や /var/cron/tabs か変更されるたびに再起動さ れることカ吩かります。 cron によって定期的に実行されるプロセス このように cro Ⅱが launchd から実行されるのなら、以 前から cron によって実行されていたプロセスをわざわざ launchd に移行する必要はないのでは、と思うかもしれま せん。しかし、 launchd にも cron と同じく定期的にプロ セスを実行する仕組みがありますから、 launchd → cron →プロセスという回り道をしなくても、 launchd →プロセ スのように直接起動できます。 たとえば、毎日、午前 3 時 15 分に daily と呼ばれるプロ 126 セスが実行されますが、これは periodic というコマンドに daily という引数を与えることで実現されています。その ための設定ファイルが /System/Library/LaunchDae- mons.com/apple.periodic-daily.plist です ( 図 2 ) 。 このファイルでは、まず com.apple.periodic-daily と いうラベル名が定義されています ( 5 ~ 6 行目 ) 。 Mac OS X 独自のものについては、、、 com.apple" という接頭辞が 付くようです。 7 ~ 11 行目の ProgramArguments では、 periodic コ マンドに引数 daily を渡す指定が書かれています。その次 の LowPriorityIO が true ( 12 ~ 13 行目 ) 、 Nice が 1 ( 14 ~ 15 行目 ) になっているのは、それぞれこのプロセスの入 出力の優先度を下げること、実行の優先度 (nice 値 ) を 1 にすることを指定しています。 最後の StartCaIendarInterval の部分 ( 16 ~ 22 行目 ) が、この種のプロセスを設定するポイントになります。 こには key の値として Minute 、 Hour 、 Day 、 Weekday 、 Month があり、それぞれ分、時、日、曜日 ( 0 ~ 7 。 0 と 7 が日曜日 ) 、月を整数で指定します。ここで指定されなかっ た key は、ワイルドカード ( いつでもよい ) を意味します。 毎日何時とか何月何日という指定でなく、、何分おき " と いう指定をしたいときは、 StartCalendarIntervaI では なく startlnterval を使います。その場合、このキーの値 として与えた秒数ぶんだけの間隔をおいてプロセスが起動 されます。たとえば、 5 分おきに実行したい場合は、 UNIX MAGAZINE 2005 . 11