PHP-FPM त्रुटि लॉग के लिए नहीं लिखता है


161

मैंने अभी एक nginx + php-fpm सर्वर स्थापित किया है। सब कुछ ठीक लगता है सिवाय इसके कि PHP-FPM अपने लॉग में कभी त्रुटि नहीं लिखता है।

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;
  }
}

मैंने एक त्रुटिपूर्ण php स्क्रिप्ट बनाई है और चला रहा हूँ, और वेब ब्राउज़र पर त्रुटि आउटपुट देखता हूँ। इसके अलावा nginx त्रुटि लॉग उसी संदेश के साथ fpm से stderr आउटपुट बताता है। मैंने जाँच की है कि उपयोगकर्ता ने लिखा है (मैंने 777 की भी कोशिश की है) नियुक्त लॉग फ़ोल्डर में अनुमति। यहां तक ​​कि नियत त्रुटि .log फ़ाइल php-fpm द्वारा सफलतापूर्वक बनाई गई है। हालाँकि, लॉग फ़ाइल हमेशा खाली होती है, इससे कोई फर्क नहीं पड़ता कि php स्क्रिप्ट से कोई अपमानजनक त्रुटि हुई है।

क्या चल रहा है?

[काफी समय बाद कारण मिला]

इसकी अनुमति थी। साइटों के उपयोगकर्ताओं के लिए स्वामी को बदलने से समस्या हल हो गई।


यह उल्लेखनीय है कि समस्याग्रस्त php संस्करण v5.3.9 और v5.3.14 (आज के अनुसार) के बीच है। यह v5.3.15 और v5.4.5 से शुरू होने वाला काम करना चाहिए।
एंटन बेंको

यदि आप hhvm + php-fpm का उपयोग कर रहे हैं तो होमस्टेड के साथ लॉग टेल /var/log/hhvm/error.log पर है
astroanu

यहां भी यही समस्या। ऐसा लगता है कि पहुंच और धीमी लॉग को अलग-अलग अनुमतियों की आवश्यकता है, इस प्रकार फ़ोल्डर रूट -755 के साथ बनाया गया है।
scones

जवाबों:


190

यह मेरे लिए काम किया:

; 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

संपादित करें:

संपादित करने के लिए फ़ाइल वह फ़ाइल है जो आपके वांछित पूल को कॉन्फ़िगर करती है। डिफ़ॉल्ट रूप से इसके: /etc/php-fpm.d/www.conf


5
<हड़ताल> किस कॉन्फिग फ़ाइल में? php.ini? php-fpm.conf? </ हड़ताल>। मैंने इसे अपने अंदर समेट लिया/etc/php-fpm.d/www.conf
कुंडा

16
Ubuntu 14 पर यह फ़ाइल /etc/php5/fpm/pool.d/www.conf
Gilberto Albino

2
मुझे लगता है कि सवाल यह है कि यह मायावी "मुख्य त्रुटि लॉग" कहां है ... ओह, मैं देखता हूं, यह php_admin_value[error_log]उसी कॉन्फिग फाइल में मूल्य है - /var/log/php-fpm/www-error.log पर CentOS 7 , उदा
ब्रैड पीबॉडी

7
sudo vi /etc/php/7.0/fpm/pool.d/www.confमेरे लिए
कोलिन एंडरसन

यह मेरे लिए सही तरीका था, डेबियन 9.1 और पीएचपी-
एफपीएम

79

अपने php-fpm लॉग को लिखने से पहले मैं लंबे समय तक इससे जूझता रहा /var/log/upstart/php5-fpm.log। यह एक बग प्रतीत होता है कि कैसे upstart और php-fpm के बीच बातचीत होती है। यहाँ और देखें: https://bugs.launchpad.net/ubuntu/+source/php5/+bug/1319595


11
धन्यवाद!! यह मेरे लिए महत्वपूर्ण था। मैंने दो फाइलों को समेटना समाप्त कर दिया क्योंकि मुझे पता है कि मैं इसे बाद में याद नहीं करने वाला हूँ:ln -sf /var/log/upstart/php5-fpm.log /var/log/php5-fpm.log
njbair

PHP इतना भ्रामक है ... एक पूर्व-निर्मित /var/log/php7.0-fpm.logहैं, इसलिए php_admin_value[error_log] = /var/log/fpm-php.www.logगैर-मानक लॉग पर पुनर्निर्देशित करेगा ??
पीटर क्रूस

53

मेरे पास एक समान मुद्दा था और pool.d/www.confफ़ाइल के लिए निम्नलिखित करना था

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

यह अभी भी लॉग फ़ाइल नहीं लिख रहा था, इसलिए मुझे वास्तव touch /var/log/fpm-php.www.logमें सही मालिक की स्थापना करके इसे बनाना थाsudo chown www-data:www-data /var/log/fpm-php.www.log

एक बार जब यह किया गया था, और php5-fpm फिर से शुरू हुआ, लॉगिंग फिर से शुरू किया गया।


वास्तव में ऐसा ही था! मुझे त्रुटि के बाद भी कुछ
फ़्यूचर कंटेंट

इस लिए आपका बहुत - बहुत धन्यवाद! यह मेरे लिए Ubuntu 14.04.1 (जेसी) पर समाधान था, अगर यह किसी और की मदद करता है।
विलियम टरेल

एक योनि / डेबियन मट्ठा पर्यावरण में कुछ समस्या।
Xosofox

अन्य रास्ते, जैसे / var / log /, जहां बस समय की बर्बादी होती है।
पेड्रो गौस

1
क्यों?! यह अभी भी fpm-php7 पर एक समस्या है।
user1634074

31

कई php config फाइल हैं, लेकिन यह वह है जिसे आपको संपादित करने की आवश्यकता है:

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

रेखा जो कहती है उसे अनिमित करें:

catch_workers_output

यह PHPs stderr को php-fpm के एरर लॉग के बजाय / dev / null में जाने की अनुमति देगा।


2
डॉकर्स का उपयोग करने वालों के लिए आपकी कॉन्फिग फाइल्स स्थित हैं:/usr/local/etc/php-fpm.d/
एडवर्ड

इस आत्मविश्वास के साथ, लॉग इन, एट /var/log/php7.0-fpm.log, एट /var/log/fpm-php.www.logया अन्य कहां जाता है ?
पीटर क्रूस

यह कहाँ लॉग इन करता है?
विक्टर जोरास

26

मैंने यहां उत्तरों के एक समूह से अंतर्दृष्टि एकत्रित की और मैं एक व्यापक समाधान प्रस्तुत करता हूं:

इसलिए, यदि आप php5-fpm के साथ nginx सेटअप करते हैं और संदेश का उपयोग करके लॉग इन करते हैं, error_log()तो आप इसे देख सकते हैं/var/log/nginx/error.log डिफ़ॉल्ट रूप से ।

यदि आप बहुत अधिक डेटा (एक सरणी कहते हैं) का उपयोग करके लॉग करना चाहते हैं तो एक समस्या उत्पन्न हो सकती है error_log(print_r($myArr, true));। यदि कोई सरणी काफी बड़ी है, तो ऐसा लगता हैnginx आपकी लॉग एंट्री को छोटा देगा।

इसके चारों ओर पाने के लिए आप लॉग को प्रबंधित करने के लिए fpm( php.net fpm config ) कॉन्फ़िगर कर सकते हैं । यहाँ ऐसा करने के लिए कदम हैं।

  1. खोलें /etc/php5/fpm/pool.d/www.conf:

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

  2. पंक्ति ;की शुरुआत में हटाकर निम्नलिखित दो पंक्तियों को रद्द करें: (error_log यहां परिभाषित किया गया है: php.net )

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

  3. बनाएँ /var/log/fpm-php.www.log:

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

  4. स्वामित्व बदलें /var/log/fpm-php.www.logताकि php5-fpm इसे संपादित कर सकें:

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

    नोट: vagrantवह उपयोगकर्ता है जिसे मुझे स्वामित्व देने की आवश्यकता है आप देख सकते हैं कि $ ps aux | grep php.*wwwपहले कॉलम को चलाकर और देख कर आपके लिए यह कौन सा उपयोगकर्ता होना चाहिए ।

  5. Php5-fpm को पुनरारंभ करें:

    $ sudo service php5-fpm restart

अब आपके लॉग इन होंगे /var/log/fpm-php.www.log


मैंने यह कोशिश की, फिर भी "fpm-php.www.log" खाली है। कोई उपाय?
सुदर्शन नायर

अपने प्रिंट करें phpinfo()और देखें कि क्या ये सेटिंग्स वास्तव में @SudharshanNair को मिला है।
Gezim

@Gezim। आपके जवाब के लिए धन्यवाद। मेरी त्रुटि लॉग मार्ग है /var/log/fpm-php.www.log। फिर भी यह फ़ाइल खाली है
सुदर्शन नायर

@SudharshanNair, यदि log_errorsत्रुटियों को जांचने के लिए केवल अन्य चीज़ पर चालू किया जाता है , तो फ़ाइल की अनुमति और स्वामित्व है (चरण 4)।
गिजिम

@Gezim। मैंने 777 अनुमति और स्वामित्व दिया है www-data:www-data, फिर भी कोई भाग्य नहीं है। कोई उपाय ?
सुदर्शन नायर

14

V5.3.9 और अब तक (5.3.14 और 5.4.4) से php-fpm में बग https://bugs.php.net/bug.php?id=61045 है। डेवलपर ने तय किया कि अगली रिलीज में लाइव होगा। यदि आप प्रतीक्षा नहीं करना चाहते हैं - उस पृष्ठ पर पैच का उपयोग करें और 5.3.8 पर फिर से निर्माण या रोलबैक करें।


4

आपकी fpm.conf फ़ाइल में आपने 2 चर सेट नहीं किए हैं जो केवल त्रुटि लॉगिंग के लिए हैं।

चर हैं error_log(आपकी त्रुटि लॉग फ़ाइल का फ़ाइल पथ) और log_level(त्रुटि लॉगिंग स्तर)।

; 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/phpबजाय डिफ़ॉल्ट नहीं है /usr/local/php/var? सिर्फ अटकलें।
n611x007

2

मेरे मामले में मैं बताता हूं कि त्रुटि लॉग /var/log/php-fpm/www-error.log पर जा रहा था । इसलिए मैंने /etc/php-fpm.d/www.conf में इस लाइन पर टिप्पणी की

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

और जैसा कि ऊपर कहा गया है कि मैंने इस लाइन को भी अनफॉलो कर दिया है

catch_workers_output = yes

अब मैं nginx द्वारा निर्दिष्ट फ़ाइल में लॉग देख सकता हूं।


0

मैं मौजूदा उत्तरों में एक और टिप जोड़ना चाहूंगा क्योंकि उन्होंने मेरी समस्या का समाधान नहीं किया है।

अपने php स्थान ब्लॉक में निम्नलिखित नगीनेक्स निर्देश के लिए देखें:

fastcgi_intercept_errors on;

इस लाइन को हटाने से कई घंटों के संघर्ष और बालों को खींचना समाप्त हो गया है।

यह /etc/nginx/default.d/php.confमेरे फेडोरा की तरह कुछ शामिल गोपनीय निर्देशिका में छिपा हो सकता है ।


-1

मेरे मामले में php-fpm गायब php-mysql मॉड्यूल की वजह से बिना किसी लॉगिंग के 500 त्रुटि उत्पन्न करता है। मैं जूमला इंस्टॉलेशन को दूसरे सर्वर में ले गया और इसके बारे में भूल गया। इसलिएapt-get install php-mysql और सेवा पुनरारंभ ने इसे हल कर दिया।

मैंने सफलता के बिना टूटी हुई लॉगिंग को ठीक करने की कोशिश के साथ शुरुआत की। अंत में stracedb से संबंधित सिस्टम कॉल के बाद मुझे असफल संदेश मिला। हालाँकि मेरा मामला सीधे तौर पर op के सवाल से जुड़ा नहीं है, फिर भी मुझे उम्मीद है कि यह उपयोगी हो सकता है।


-4

"PHP-FPM" के मालिक निर्देशिका की जाँच करें

तुम कर सकते हो:

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

5
777 पर कभी भी सेट / var / log / php-fpm न करें, आपने अभी-अभी अपने सर्वर को
सिम्लिंक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.