カメノドットコム
Debian大好きでメインで節操ない感じ。
GMOもわりと好き。
RSS feedly

【PHP7】自動起動スクリプトとログローテーション

php-fpm の自動起動スクリプトを登録して、ログローテーションを行います。
ログの肥大化はパフォーマンス低下につながりますので、毎日ログを回して再起動します。

---- [PR] ----
現在契約中 : GMOクラウドのVPS : お名前.com
今後契約するかも : お名前.com VPS
--------------

自動起動スクリプトを登録する

PHP7のソースを展開してコンパイルしたディレクトリにある「sapi/fpm/init.d.php-fpm」がそのまま使えましたので、これを使用します。
リネームしつつコピーして、実行権限を与えて登録します。

$ sudo cp /PATH/PHP_SRC/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
$ sudo chmod +x /etc/init.d/php-fpm
$ sudo update-rc.d /etc/init.d/php-fpm defaults

自動起動制御スクリプトの設置は以上で完了です。

ログローテーションの設定

「/usr/local/php/var/log」以下に「php-fpm.log」として保存してあるので、これをローテーションさせるスクリプトを作成します。
「/etc/cron.d/php_fpm_logrotate」にアクセスの少ない時間帯のどこかで、ローテーションと再起動をさせるようにします。
ここでは午前4時のどこかを指定しました。
ローテーションさせるスクリプトは「/usr/local/myscripts/php_fpm_logrotation.sh」とします。
「/var/www/logs」にApacheのログを保存するようにしたので、php-fpm のログもこちらにコピーすることにします。
1年分を指定していますが、ディスクを圧迫するようなら日数を減らしてください。

$ sudo vi /usr/local/myscripts/php_fpm_logrotation.sh
#!/bin/bash

# php-fpm のログの場所
log_dir=/usr/local/php/var/log

# ログの保存先の場所
storage_dir=/var/www/logs

# ログファイルに付ける日付。当日
date=`date '+%Y%m%d'`

# ログを保存先に移動する
mv $log_dir/php-fpm.log $storage_dir/php-fpm.log-$date

# php-fpm を再起動する
/etc/init.d/php-fpm restart

# 保存したログを圧縮する
gzip -f $storage_dir/php-fpm.log-$date

# 1年以上前のログファイルを破棄する
find $storage_dir/ -mtime 365 -exec rm -f {} \;
$ sudo chmod +x /usr/local/myscripts/php_fpm_logrotation.sh

作成したスクリプトを「/etc/cron.d/php_fpm_logrotate」から実行させます。
時刻は、午前4時の5分から55分のどこか、を指定しました。

$ sudo vi /etc/cron.d/php_fpm_logrotate
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

# 分 時 日 月 曜日 ユーザ    コマンド
05-55 04 * * * root /usr/local/myscripts/php_fpm_logrotation.sh
$ sudo chmod 600 /etc/cron.d/php_fpm_logrotate
$ sudo /etc/init.d/cron restart

「/etc/cron.d/*」のファイル群は、パーミッションとオーナーが「-rw------- 1 root root」となることに注意してください。
以上で php-fpm のログを毎日回しつつ、デーモンを再起動できるようになりました。

Sponsored Link