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

作成日: 2013/10/30

OSSでLinuxサーバ構築

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

トップページOSSでLinuxサーバ構築 > syslogdとlogrotatedを使ってシェルログを出力&ローテートする
このエントリーをはてなブックマークに追加

構成

解説

 シェルスクリプトを作成するに当たって、処理の進行状況や処理結果をログファイルに記録するために 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設定

(1) 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 ←追記

(2) 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.<プライオリティ> "<出力したいメッセージ>"

プロフィール

らのっち

損害保険会社のIT企画部に勤務するSEです。OSSを勉強中です。

<所属>
日本PostgreSQLユーザ会とくしまOSS普及協議会

■■■ 当サイトは Internet Explorer 11 と Mozilla Firefox 43 で動作確認済みです。 ■■■