OSS Fan ~OSSでLinuxサーバ構築~

このエントリーをはてなブックマークに追加

syslogdとlogrotatedを使ってシェルログを出力&ローテートする

カテゴリ:OSSセットアップ | ソフトウェア:Linux | タグ:
最終更新日:2020/11/19 | 公開日:2013/10/30

目次

概要

 シェルスクリプトを作成するに当たって、処理の進行状況や処理結果をログファイルに記録するために echo コマンドでファイルにメッセージを書き出すことがあります。

echo "Apache started." >> /var/log/shell.log

 しかし、複数のシェルスクリプトから同一ファイルに同時に書き込みを行うと、 ファイルのオープン処理が競合して、正しく書けないことがあります(希ですが)。 そこで、syslogdを使用してシスログと同様にログの出力を行うように設定します。

構成

サーバ構成

OSバージョン

Red Hat Enterprise Linux 5.9 x86_64

パッケージ一覧

sysklogd-1.4.1-46.el5
logrotate-3.7.4-14
※標準でインストールされるため追加パッケージなし

環境構築

syslogd設定

syslogdの設定ファイル編集

 syslogdの設定を行います。 シェルのログファイル名は /var/log/shell.log とします。 出力時のファシリティは local2 を使います。 ファシリティはlocal0~7、userなど何でも良いですが、 他で使われていなさそうな local2 を選択しました。 また、全プライオリティを shell.log ファイルに出力します。

# cd /etc/
# vi syslog.conf
ファイル名:/etc/syslog.conf
※ファイルの末尾に追記※
# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log

# Shell Log ←追記
local2.*                                                /var/log/shell.log ←追記

syslogdの再起動

 設定ファイルの変更を反映させるためにsyslogdを再起動します。

# service syslog restart
カーネルロガーを停止中:                                    [  OK  ]
システムロガーを停止中:                                    [  OK  ]
システムロガーを起動中:                                    [  OK  ]
カーネルロガーを起動中:                                    [  OK  ]

logrotated設定

 ログファイルは放っておくと増え続けてしまうので、 logrotatedを使用して1週間に1回ローテートします。 ローテートされたログの保持期間は 7 x 13 = 91日間(約3ヶ月間)とします。

# cd /etc/logrotate.d/
# vi syslog
ファイル名:/etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log
/var/log/cron { ←実際には改行はありません sharedscripts        |変更     /var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log
/var/log/cron /var/log/shell.log { ←実際には改行はありません weekly   ←追加(前回のローテートから1週間以上経過したらローテート) rotate 13 ←追加(バックアップを13世代保持する) missingok ←追加(対象のファイルがなくてもエラーにしない) sharedscripts

動作テスト

 syslogdを使用してログファイルにメッセージを書き出すには logger コマンドを使用します。

# logger -t start.sh -p local2.err "This is test message."
# tail /var/log/shell.log
Oct 30 21:45:15 server1 start.sh: This is test message.

利用方法

 シェルスクリプト内でログを出力したい場所に以下のコマンドを記述します。

logger -t <シェル名> -p local2.<プライオリティ> "<出力したいメッセージ>"