エックスサーバー | PHPエラーログ設定とログローテーションスクリプト

PHPエラーログの保存場所変更方法、ログを日次でローテーションし、14世代分を保持するシェルスクリプトの作成方法、Cron設定による自動化の手順を解説します。

PHPエラーログの場所変更

PHPのエラーログをカスタマイズしたい場合、php.iniの設定を変更してエラーログの保存場所を指定することができます。

設定手順:

  1. エックスサーバーのサーバーパネルにログインし、対象のドメインディレクトリに移動します。
  2. php.iniファイルを編集して、以下の設定を追加します。
error_log = /home/サーバーID/対象ドメイン/logs/php_error.log

注意: サーバーID対象ドメインは、自分の環境に合わせて正しく変更してください。この設定により、PHPのエラーログが指定されたファイルに出力されるようになります。

ログローテーションスクリプトの作成

ログファイルが増大しないよう、毎日ログをバックアップし、古い世代のログを削除するためのシェルスクリプトを作成します。このスクリプトでは、14世代分のログを保持し、それを超えたバックアップは自動的に削除します。

シェルスクリプトの内容

以下の内容をシェルスクリプトとして保存します。

#!/bin/bash

# ログファイルのパス
LOG_FILE="/home/サーバーID/対象ドメイン/logs/php_error.log"
BACKUP_DIR="/home/サーバーID/対象ドメイン/logs/backup"

# 日付を含んだバックアップファイル名
BACKUP_FILE="$BACKUP_DIR/php_error_$(date +'%Y-%m-%d').log"

# 1. ログファイルをバックアップ
cp $LOG_FILE $BACKUP_FILE

# 2. 元のログファイルを空にする
> $LOG_FILE

# 3. 古いバックアップファイルを削除(14世代を超えるもの)
find $BACKUP_DIR -type f -name "php_error_*.log" -mtime +14 -exec rm {} \;

スクリプトの説明:

  1. LOG_FILEBACKUP_DIRに、エラーログファイルとバックアップディレクトリのパスを指定しています。
  2. cpコマンドを使用して、現在のエラーログファイルをバックアップします。ファイル名には実行日時を含むYYYY-MM-DD形式の日付が追加されます。
  3. > $LOG_FILEで、元のエラーログファイルをクリア(空に)します。
  4. findコマンドで、バックアップディレクトリ内に保存されているログファイルのうち、14日以上前のものを自動的に削除します。

スクリプトの保存場所

作成したシェルスクリプトを、サーバーの任意の場所に保存します。例えば、次のように保存します:

/home/サーバーID/scripts/php_log_rotation.sh

保存した後、スクリプトに実行権限を付与します:

chmod +x /home/サーバーID/scripts/php_log_rotation.sh

Cronでスクリプトを日次実行

エックスサーバーのCron機能を使って、先ほどのシェルスクリプトを毎日自動で実行するように設定します。

Cron設定手順:

  1. エックスサーバーのサーバーパネルにログインし、「cron設定」画面に移動します。
  2. 「Cron設定追加」フォームで次のように設定します。
  • 分: 0
  • 時間: 0
  • 日: *
  • 月: *
  • 曜日: *
  • コマンド: /home/サーバーID/scripts/php_log_rotation.sh

これにより、毎日午前0時にスクリプトが実行され、PHPエラーログのバックアップとローテーションが自動で行われます。

Cron設定の例

0 0 * * * /home/サーバーID/scripts/php_log_rotation.sh

この設定は、毎日午前0時に指定したシェルスクリプトを実行することを意味します。

まとめ

エックスサーバー上でのPHPエラーログ管理を自動化し、毎日ログファイルをバックアップし、14世代分のログを保持する方法を解説しました。このプロセスにより、ログが肥大化することを防ぎ、サーバーのディスクスペースを効率的に管理できます。

コメント

タイトルとURLをコピーしました