いますぐ実践! Linuxシステム管理

[バックナンバーのトップへ] [Linux システム管理のトップへ]


いますぐ実践! Linux システム管理 / Vol.018 / 読者数:389名

こんばんは,うすだです.

先週1週間分の寝不足を解消すべく,土曜日は怒涛のごとく睡眠をとりました. おかげで,寝不足で頭痛かったのが,寝過ぎで頭が痛く….

その間,2つほど夢を見ました.
1つは,仕事の〆切が迫っていて,慌ててどこかへ,雨の中を傘もささずに走っている夢でした.
もう1つは,待ち合わせ場所へ急いで行き,名刺交換しようとしたら, 古い名刺しかなくて,言い訳している夢でした.

誰かに夢判断してもらうまでもなく,何かに追われているとしか思えません. …いえ,何か…ではなく,仕事に追われている,ただそれだけです.
しかし,せっぱつまっていても,心には余裕を持てる人間になりたい, と思いました.こんな夢ばっかり見たくありませんしね.

…それでは,今日も,はりきってまいりましょう!

今週のお題 - ログをローテーションする

今週こそは,宣言通り,ログのローテーションをやります.やりますよ!

日々休むことなく,syslogd さんは,ログをファイルに出力し続けているわけですが, そのまま放置しておくと,ログファイルがどんどん肥大化していってしまいます.
(巨大なログから必要な情報を探す…なんてことはしたくないですよね.)

そこで,UNIX 的なシステムでは,古来から,ログをローテートして対処してきました. SunOS4.x などのころは,newsyslog という名のシェルスクリプトが, cron で定期的に実行され,ローテートを行っていました.

ちょっと発掘していたら,SunOS4.x 時代の newsyslog が出てきました.
せっかく?ですので,一部をご紹介します.(20世紀ものです.)

  #!/bin/sh
  LOG=messages
  cd /var/adm
  test -f $LOG.2 && mv $LOG.2 $LOG.3
  test -f $LOG.1 && mv $LOG.1 $LOG.2
  test -f $LOG.0 && mv $LOG.0 $LOG.1
  mv $LOG $LOG.0
  cp /dev/null $LOG
  chmod 640 $LOG
  ...(他のログの操作が続きますが,同様なので,割愛します)...
  kill -HUP `cat /etc/syslog.pid`

このスクリプトでは,
/var/adm/messages.2 を /var/adm/messages.3 という名前に,
/var/adm/messages.1 を /var/adm/messages.2 という名前に,
/var/adm/messages.0 を /var/adm/messages.1 という名前に,
/var/adm/messages を /var/adm/messages.0 という名前に変更し,
空の /var/adm/messages を作成して,syslogd に知らせる, ということをしています.
すごくベタなスクリプトですが,期待した通りには動作してくれました.

さて,現代に戻ります.
Linux には,logrotate というものが,標準で入っています.
保存する期間や切替える時期,圧縮の有無,切替え前後のコマンド実行等を, 設定しておけば自動的に行ってくれます.便利ですね.
また,syslog 以外のログもローテートしてくれます.

設定ファイルは,/etc/logrotate.conf です.
logrotate 実行時に指定するので,実はどこでもいいのですが, 皆こうなっています.暗黙の了解,というやつでしょうか.
いきなりですが,例を示して,その内容を簡単に説明します.

  weekly
  rotate 4
  include /etc/logrotate.d
  /var/log/wtmp {
    size 1M
    create 0664 root root
    rotate 1
  }

最初の weekly は,1週間でログをローテートさせる,という指定です.
これを daily や monthly にすると,それぞれ1日と1カ月でローテートさせる, という設定になります.

次の rotate 数字 は,指定した数字のログまで保存する,という指定です. weekly と合わせると,今のログを除いて,4週間分保存されることになります.

次の include パス は,指定したファイルを読み込んで解釈する,という指定です. パスがディレクトリなら,そのディレクトリ下にあるファイル全部を読み込んで解釈してくれます.
(/etc/logrotate.d を見ると,いろんなファイルが転がっていますよ.)

その次は,ログのパス名と,その後を { と } で囲んでいます.
これは,指定したログに対する設定です.囲まれていない場所で指定したものは, すべてのログを対象としますが,{ } で囲まれた指定は, そのログだけを対象とします.
size 数字 は,ログのサイズがその数字より大きくなると,ローテートを行います. k をつけるとキロバイト,M をつけるとメガバイトです.
create モード 所有者 グループ は,ローテートした後に,空のファイルを, 指定したモード(chmod で指定する8進数の値),所有者およびグループで生成するという指定です.

それから,ログを切替えたことを syslogd に知らせる必要があります.
logrotate が勝手に切替えていますので,syslogd は気づかないのです.
そのため,/etc/logrotate.d/syslog が,以下のようになっています.
(行末を \ で折り返している箇所は,実際は1行です.)

  /var/log/messages /var/log/secure /var/log/maillog \
  /var/log/spooler /var/log/boot.log /var/log/cron {
    sharedscripts
    postrotate
      /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> \
      /dev/null || true
    endscript
  }

postrotate 〜 endscript で囲まれたスクリプトを,ログのローテート後に実行します. ここでは,SIGHUP シグナルを syslogd に送ることで, ログの切替えを知らせています.
また,sharedscripts を指定することで,これらのログすべての切替えを行った後に, 1度だけスクリプトを起動するようにしています.
(sharedscripts がないと,各ログ毎にスクリプトを実行します.)

そして,ローテートさせるには,以下のように logrotate を実行します.

  # logrotate /etc/logrotate.conf

実行すると,/etc/logrotate.conf を解釈して, 前回ローテートした時の日付が保存されている /var/lib/logrotate.status と比較しながら,ローテートを行います.

ですが,すでに,cron で,logrotate が起動されるようになっていると思いますので, 明示的に上記のように実行する必要はほぼないと思います.
(cron -> run-parts -> /etc/cron.daily/logrotate -> logrotate 実行)

以上,超かけ足で,logrotate をご紹介しました.

実践! とかいいつつも,ちょっと試しにくい相手ではあります.
ちょっと試してみたいなと思った方は,別の設定ファイルに試したい設定を記述して, /var/lib/logrotate.status の日付を書き換えて,コマンドライン上で実行すると, 他への影響が少なくて,よいと思います.

ま,そうでなくても,ログによって保存期間を変更するくらいは, やってみてもいいんじゃないかと思います.

宿題の答え

先週の問題は,

  syslog で,facility が local5 で priority が notice 以上のログを,
  /var/log/local5.log に記録しつつ,別のマシンである logserver にも
  送信する設定を,してください.

でした.

/etc/syslog.conf に,以下の2つのエントリを追加すればよいです.

  local5.notice          /var/log/local5.log
  local5.notice          @logserver

すみません,簡単でしたね.
…おっと,SIGHUP シグナルの送信をお忘れなく.

今週の宿題

今週の宿題は,こちらです.

  logrotate を実行後,/var/log のリスト表示を,メールするように設定
  してください.

です.またメール…す,すみません….
…ええっと,/etc/logrotate.conf に記述できるところが,ミソです.

あとがき

先週は,岡本太郎の「今日の芸術」という本を,読んでいました.

岡本太郎の「今日の芸術」
http://www.amazon.co.jp/exec/obidos/ASIN/4334727891/usupiorg-22

岡本太郎というと,笑っていいともに出ていた, ちょっといっちゃってる感じの印象があるのですが,書籍を読むと, すごく納得させられる文章を理論的にずばっと書いているので,逆にびっくりします.

この本では,芸術とは何か,ということを,すごくわかりやすく, 情熱的に述べています.読んでいて,すかっとします.まがりなりにも, 毎日絵を描いるからなのかもしれませんが….
しかし,芸術に技能は必要なく,素人でも感覚とたくましい精神があれば芸術家になれるとか, セザンヌもゴッホも,ゴーギャンもルソーも,決して上手だったわけではない, という話を聞くと,あれ,私も,栗でいけるんじゃないだろうか, などと誤解してしまいそうです.(^ε^;

この本は,1954年に書かれたものですが, とても50年前のものとは思えない新鮮さを感じます. 今でも,岡本太郎の名をよく耳にしますが,その理由が,なんとなくわかりました.

これからも,もんもんと悩みながら,でも,それからなるべく逃げずに, 立ち向かって生きていきたいと思います.うおー! とか言いながら, 栗の絵を描き続けようと思います.
(もちろん,家族がびっくりしますので,うおーとは口に出しませんが.)

…といいますか,私,技術者なのに,技術の本を全然読んでいません.
やばいです.ネタを得るためにも,今週は技術な本を読みたいと思います.

そんなわけで,しつこいようですが,感想やネタ,疑問点など, なんでもお待ちしております.このメールに,そのまま返信してください.

今週も,ここまで読んでいただき,ありがとうございました.
それでは,また来週,お会いしましょう!

「いますぐ実践! Linux システム管理」の解除は,以下からどうぞ.
http://www.usupi.org/sysad/ (まぐまぐ ID:149633)

バックナンバーは,こちらに全部あります.
http://www.usupi.org/sysad/backno.html

「栗日記」−栗の絵,懲りずに毎日描いてます.もうすぐ1300枚です.
http://www.usupi.org/kuri/ (まぐまぐ ID:126454)


[バックナンバーのトップへ] [Linux システム管理のトップへ]

トップ

バックナンバー
    [日付順] [目的別]

プロフィール

▼ リンク

独学Linux
Linuxデスクトップ環境に関する情報が満載です。 メルマガもありますよ。
Server World
CentOS 6をサーバとしたときの設定例が、これでもかというくらいたくさん載っています。 CentOS以外のディストリビューション(Fedora, Ubuntu)も充実しています。
LINUXで自宅サーバーを構築・導入(Fedora9)
Fedora9のインストールの仕方から管理方法まで、詳しく載っています。 SearchManには情報がもりだくさんです。
マロンくん.NET
〜サーバ管理者への道〜
Linuxをサーバとして使用するための、いろいろな設定方法が載っています。 マロンくんもかわいいです。 なんといっても、マロンくんという名前がいいですね!!
日経Linux
今や数少なくなってしまったLinuxの雑誌。ニュースやガイドもあります。
Linux Square − @IT
@ITが提供する、Linux の情報が満載。 載っていない設定方法はないんじゃないでしょうか。
gihyo.jp…技術評論社
Linuxに限らず様々な技術情報が満載のサイト。 SoftwareDesign誌も、 ソフトウェア技術者は必見です。
SourceForge.JP Magazine
Linux に限らず、オープンソース関連の記事が網羅されています。
ITmediaエンタープライズ:Linux Tips 一覧
Tips というより FAQ 集でしょうか。わからないことがあれば覗きましょう。
IBM developerWorks : Linux
開発者向けですが、勉強になりますよ。
Yahoo!ニュース - Linux
Yahoo!のLinuxに関するニュース一覧です。
栗日記
システム管理とかと全然関係ありませんが、毎日栗の絵を描いています。
システム管理につかれちゃったとき、癒されたいときに、ご覧ください。:-)
WEB RANKING - PC関連
ランキングに参加してみました。押してやってください。

▼ 作ってみました

Add to Google

▼ せんでん




▼ 最近読んだ本

▼ 気に入ってる本