PHP-FPM hata günlüğüne yazmıyor


161

Az önce bir nginx + php-fpm sunucusu kurdum. PHP-FPM'nin günlüğüne hiçbir zaman hata yazmaması dışında her şey iyi görünüyor.

fpm.conf

[default]
listen = /var/run/php-fpm/default.sock
listen.allowed_clients = 127.0.0.1
listen.owner = webusr
listen.group = webusr
listen.mode = 0666
user = webusr
group = webusr
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.status_path = /php/fpm/status
ping.path = /php/fpm/ping
request_terminate_timeout = 30s
request_slowlog_timeout = 10s
slowlog = /var/log/php-fpm/default/slow.log
chroot = /var/www/sites/webusr
catch_workers_output = yes
env[HOSTNAME] = mapsvr.mapking.com
php_flag[display_errors] = on
php_admin_value[error_log] = /var/log/php-fpm/default/error.log
php_admin_flag[log_errors] = on

nginx.conf

server
{
  listen        80 default_server;
  server_name   _;

  charset       utf-8;
  access_log    /var/log/nginx/access.log rest;

  include       conf.d/drops.conf.inc;

  location      /
  {
    root        /var/www/sites/webusr/htdocs;
    index       index.html index.htm index.php;
  }

  # pass the PHP scripts to FastCGI server listening on socket
  #
  location      ~ \.php$
  {
    root           /var/www/sites/webusr/htdocs;
    include        /etc/nginx/fastcgi_params;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME /htdocs/$fastcgi_script_name;
    if (-f $request_filename)
    {
      fastcgi_pass   unix:/var/run/php-fpm/default.sock;
    }
  }

  location      = /php/fpm/status
  {
    include        /etc/nginx/fastcgi_params;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass   unix:/var/run/php-fpm/default.sock;
  }

  location      = /php/fpm/ping
  {
    include        /etc/nginx/fastcgi_params;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass   unix:/var/run/php-fpm/default.sock;
  }

  # redirect server error pages to the static page /50x.html
  #
  error_page    500 502 503 504  /50x.html;
  location      = /50x.html
  {
    root        /usr/share/nginx/html;
  }
}

Hatalı bir php betiği yaptım ve çalıştırdım ve web tarayıcısında hata çıktısını gördüm. Ayrıca nginx hata günlüğü aynı mesajla fpm'den stderr çıktısını belirtir. Kullanıcının atanan günlük klasörüne yazma (777 denedim) iznine sahip olup olmadığını kontrol ettim. Atanan error.log dosyası bile php-fpm tarafından başarıyla oluşturulmuştur. Ancak, php komut dosyasından ne çirkin bir hata yapılmış olursa olsun, günlük dosyası her zaman boştur.

Neler oluyor?

[Nedeni bir süre sonra bulundu]

İzin vardı. Sahibi sitenin kullanıcılarına değiştirdi sorun çözüldü.


Problemli php versiyonunun v5.3.9 ve v5.3.14 arasında (bugün olduğu gibi) bahsetmeye değer. V5.3.15 ve v5.4.5'ten başlayarak çalışmalıdır.
Anton Babenko

hhvm + php-fpm ile çiftlik evi kullanıyorsanız günlük /var/log/hhvm/error.log adresinde
astroanu

Burada da aynı problem. Erişim ve yavaş günlük farklı izinlere ihtiyaç duyuyor gibi görünüyor, bu nedenle klasör root-755 ile oluşturulur.
çörekler

Yanıtlar:


190

Bu benim için çalıştı:

; Redirect worker stdout and stderr into main error log. If not set, stdout and
; stderr will be redirected to /dev/null according to FastCGI specs.
; Default Value: no
catch_workers_output = yes

Düzenle:

Düzenlenecek dosya, istediğiniz havuzu yapılandıran dosyadır. Varsayılan olarak: /etc/php-fpm.d/www.conf


5
<strike> Hangi yapılandırma dosyasında? php.ini? php-fpm.conf? </ strike>. İçimde uncommented/etc/php-fpm.d/www.conf
Döner

16
Ubuntu 14'te bu dosya /etc/php5/fpm/pool.d/www.conf
Gilberto Albino

2
Sanırım soru o zaman bu zor "ana hata günlüğü" olduğu yerdir ... Oh, anlıyorum php_admin_value[error_log], aynı yapılandırma dosyasında değeri - /var/log/php-fpm/www-error.log CentOS 7 , ör.
Brad Peabody

7
sudo vi /etc/php/7.0/fpm/pool.d/www.confbenim için
Collin Anderson

Debian 9.1 ve PHP-FPM 7.0'da benim için doğru yoldu
Antwane

79

Ben php-fpm günlükleri yazılmadan önce bu uzun bir süre mücadele etti /var/log/upstart/php5-fpm.log. Bu, uptart ve php-fpm'nin nasıl etkileştiği arasında bir hata gibi görünüyor. Buradan daha fazlasını görün: https://bugs.launchpad.net/ubuntu/+source/php5/+bug/1319595


11
Teşekkürler!! Benim için anahtar buydu. Ben daha sonra hatırlamayacağım biliyorum çünkü iki dosya symlinking sona erdi:ln -sf /var/log/upstart/php5-fpm.log /var/log/php5-fpm.log
njbair

PHP önceden oluşturulmuş bir var ... öylesine şaşırtmak olduğunu /var/log/php7.0-fpm.log, bu yüzden php_admin_value[error_log] = /var/log/fpm-php.www.logstandart dışı günlüğüne yönlendirir ??
Peter Krauss

53

Benzer bir sorunum vardı ve pool.d/www.confdosyaya aşağıdakileri yapmak zorunda kaldım

php_admin_value[error_log] = /var/log/fpm-php.www.log
php_admin_flag[log_errors] = on

Hala günlük dosyasını yazmıyordu, bu yüzden aslında touch /var/log/fpm-php.www.logdoğru sahibini ayarlayarak oluşturmak zorunda kaldım sudo chown www-data:www-data /var/log/fpm-php.www.log.

Bu yapıldıktan ve php5-fpm yeniden başlatıldıktan sonra günlük kaydı yeniden başlatıldı.


aslında durum buydu! Hatta hatadan sonra sitede bazı diğer içerikler ortaya çıktı :)
holms

Bunun için çok teşekkürler! Bu, başkalarına yardımcı olursa, Ubuntu 14.04.1'de (Jessie) benim için bir çözümdü.
William Turrell

Vagrant / debian wheezy ortamında bazı problemler.
Xosofox

/ Var / log / gibi diğer yollar sadece zaman kaybıdır.
Pedro Góes

1
Neden?! Bu hala fpm-php7'de bir problem.
user1634074

31

Birden fazla php yapılandırma dosyası vardır, ancak bu düzenleme yapmanız gereken dosyadır:

/etc/php(version)?/fpm/pool.d/www.conf

şu satırı aç:

catch_workers_output

Bu PHPs stderr / dev / null yerine php-fpm hata günlüğüne gitmek için izin verir.


2
Liman işçisi kullananlar için yapılandırma dosyalarınız:/usr/local/etc/php-fpm.d/
Edward

De günlüğünü gider bu conf ile /var/log/php7.0-fpm.logde, /var/log/fpm-php.www.logya diğeri?
Peter Krauss

Nereye giriş yapıyor?
Viktor Joras

26

Burada bir sürü cevaptan içgörü topladım ve kapsamlı bir çözüm sunuyorum:

Php5-fpm ile size kurulum nginx ve kullanarak mesaj log Yani, error_log()sen görebiliyorum /var/log/nginx/error.logvarsayılan olarak.

Kullanarak çok fazla veri (bir dizi söyleyin) kaydetmek istiyorsanız bir sorun oluşabilir error_log(print_r($myArr, true));. Bir dizi yeterince büyükse, nginxgünlük girişinizi kesecek gibi görünüyor .

Bu sorunu aşmak için günlükleri yönetmek üzere fpm( php.net fpm config ) yapılandırabilirsiniz . İşte bunun için adımlar.

  1. Açık /etc/php5/fpm/pool.d/www.conf:

    $ sudo nano /etc/php5/fpm/pool.d/www.conf

  2. ;Satırın başında kaldırarak aşağıdaki iki satırı açınız: (hata_log burada tanımlanmıştır: php.net )

    ;php_admin_value[error_log] = /var/log/fpm-php.www.log ;php_admin_flag[log_errors] = on

  3. Oluşturun /var/log/fpm-php.www.log:

    $ sudo touch /var/log/fpm-php.www.log;

  4. /var/log/fpm-php.www.logPhp5-fpm öğesinin düzenleyebilmesi için sahipliğini değiştirin :

    $ sudo chown vagrant /var/log/fpm-php.www.log

    Not: vagrantSahiplik vermem gereken kullanıcı. $ ps aux | grep php.*wwwİlk sütuna bakarak ve bakarak bu kullanıcının sizin için ne olması gerektiğini görebilirsiniz .

  5. Php5-fpm'yi yeniden başlatın:

    $ sudo service php5-fpm restart

Şimdi günlükleriniz içeri girecek /var/log/fpm-php.www.log.


Bunu denedim, "fpm-php.www.log" boş. Herhangi bir fikir?
Sudharshan Nair

Yazdırın phpinfo()ve bu ayarların gerçekten alınıp alınmadığını görün, @SudharshanNair.
Gezim

@Gezim. cevabın için teşekkürler. benim hata günlüğü yolum /var/log/fpm-php.www.log. Hala bu dosya boş
Sudharshan Nair

@SudharshanNair, Eğer log_errorshatalar açık ise kontrol etmek için tek şey dosyanın izni ve sahiplik (adım 4).
Gezim

@Gezim. 777 izin ve sahiplik verdim www-data:www-data, Hala şans yok. Herhangi bir fikir ?
Sudharshan Nair

14

Ph5-phpm'de v5.3.9 ve bugüne kadar (5.3.14 ve 5.4.4) https://bugs.php.net/bug.php?id=61045 hata var . Geliştirici, söz konusu düzeltmenin bir sonraki sürümde yayınlanacağına söz verdi. Beklemek istemiyorsanız - bu sayfadaki yamayı kullanın ve yeniden 5.3.8'e geri yükleyin veya geri alın.


4

Fpm.conf dosyanızda, yalnızca hata günlüğü tutma için olan 2 değişken ayarlamadınız.

Değişkenler error_log(hata günlüğü dosyanızın dosya yolu) ve log_level(hata günlüğü düzeyi) şeklindedir.

; Error log file
; Note: the default prefix is /usr/local/php/var
; Default Value: log/php-fpm.log

error_log = log/php-fpm.log

; Log level
; Possible Values: alert, error, warning, notice, debug
; Default Value: notice

log_level = notice

/usr/local/var/phpyerine varsayılan değil /usr/local/php/varmi? sadece spekülasyon.
n611x007

2

benim durumumda hata günlüğünün /var/log/php-fpm/www-error.log adresine gittiğini gösteriyorum . bu yüzden /etc/php-fpm.d/www.conf içinde bu satırı yorumladım

php_flag[display_errors]   is commented
php_flag[display_errors] = on  log will be at /var/log/php-fpm/www-error.log

ve yukarıda da belirtildiği gibi bu çizgiyi de tavsiye etmedim

catch_workers_output = yes

Şimdi nginx tarafından belirtilen dosyadaki günlükleri görebiliyorum.


0

Sorunumu çözmedikleri için mevcut cevaplara bir ipucu daha eklemek istiyorum.

Php konum bloğunuzda aşağıdaki nginx yönergesine dikkat edin:

fastcgi_intercept_errors on;

Bu çizginin çıkarılması, saatlerce süren mücadeleye ve saç çekmeye son verdi.

/etc/nginx/default.d/php.confBenim fedora gibi bazı dahil conf dizininde gizli olabilir .


-1

Benim durumumda php-fpm eksik php-mysql modülü nedeniyle herhangi bir günlüğü olmadan 500 hata verir. Joomla kurulumunu başka bir sunucuya taşıdım ve unuttum. Yaniapt-get install php-mysql servis yeniden başlatma sorunu çözdü.

Başarısız olarak kırık günlük kaydını düzeltmeye çalışarak başladım. Sonunda straceben db ile ilgili sistem çağrıları sonra başarısız mesajı bulundu. Benim durumum op'un sorusuyla doğrudan ilgili olmasa da, umarım faydalı olabilir.


-4

"PHP-FPM" nin Sahip dizinini kontrol edin

Yapabilirsin:

ls -lah /var/log/php-fpm/
chown -R webusr:webusr /var/log/php-fpm/
chmod -R 777 /var/log/php-fpm/

5
/ var / log / php-fpm'yi asla 777 olarak ayarlamazsanız, sunucunuzu bir symlink saldırısına karşı savunmasız
bıraktınız
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.