サーバ移転前の環境では PHP 実行時のエラーログが標準(エラー)出力や error_log ファイルに書き出されていたが、新環境ではデフォルトで書き出されなくなっていた。
Web で調べてみると「catch_workers_output
をyes
に設定する」という記述がいくつかのサイトで見受けられたのだが、この設定でやっていることは「ワーカープロセスのログをメインのログにリダイレクトする設定」であり、ワーカープロセスが書き出したエラーのみ見たい場合には不適切だ。
ここでは、ワーカープロセスのエラーログ書き出しを有効にするために行なった設定をログとして残しておく。なお、OS は Ubuntu 16.04、PHP のバージョンは 7.2 である。
PHP プール設定の変更
PHP7.2 のワーカープロセスに関する設定は、プール用設定ファイル /etc/php/7.2/fpm/pool.d/www.conf
で設定するようだ。
sudo vi
で設定ファイル内を見てみると、以下のような記述があった。
; Default Value: nothing is defined by default except the values in php.ini and
; specified at startup with the -d argument
;php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com
;php_flag[display_errors] = off
;php_admin_value[error_log] = /var/log/fpm-php.www.log
;php_admin_flag[log_errors] = on
;php_admin_value[memory_limit] = 32M
このうち、以下の2行を uncomment し、エラーログ出力を有効にする。
php_admin_value[error_log] = /var/log/fpm-php.www.log
php_admin_flag[log_errors] = on
修正を保存後、以下のコマンドで PHP-FPM を再起動する。
$ sudo systemctl restart php7.2-fpm
Web サーバの再起動は特に必要ない。
ログファイルの権限変更
こちらのページによると、上記の設定だけでは実行ユーザ(当環境ではnginx
)から権限の問題でエラーログが出力できないらしい。
なので、予め権限を設定した空のログファイルを作成しておく。
$ sudo touch /var/log/fpm-php.www.log
$ sudo chown nginx:nginx /var/log/fpm-php.www.log
必要に応じてchmod
でパーミッションの設定もする。
以上の設定を行なえば、/var/log/fpm-php.www.log
にエラーログが書き出されるはず。
補足
php_flag[display_errors]
をon
に設定すれば、エラーが画面に出力される。