2012-11-14 12 views
19

मैंने अपने आप उबंटू पर nginx संकलित किया। मैं-n nginx.conf पैरामीटर के साथ अपना nginx शुरू करता हूं। मेरी nginx.conf फ़ाइल में, मैं त्रुटि लॉग को बंद करने का प्रयास करता हूं लेकिन असफल रहा। nginx: [चेतावनी] सका खुला त्रुटि लॉग फ़ाइल नहीं: खुले() "/usr/nginx/logs/error.log" में विफल रहा है (2: इस तरह के कोई फ़ाइल या निर्देशिकाnginx त्रुटि लॉग स्थान को बंद या निर्दिष्ट कैसे करें?

error_log /dev/null crit; 

फिर भी त्रुटि संदेश मिला)

मैं इस लॉग को कैसे बंद कर सकता हूं या अपना स्थान बदल सकता हूं?

+0

आप 'error_log' घोषणा (अपनी लाइन) को बाहर निकालने की कोशिश की है? :) – Sean3z

+0

मैंने अभी कोशिश की, केवल access_log का उपयोग करें, लेकिन अभी भी त्रुटि संदेश मिला है। मैंने फ़ोल्डर नहीं बनाया:/home/dist/carrier/nginx/logs। nginx को पुनरारंभ करना: nginx: [चेतावनी] त्रुटि लॉग फ़ाइल नहीं खोल सका: खोलें() "/home/dist/carrier/nginx/logs/error.log" विफल रहा (2: ऐसी कोई फ़ाइल या निर्देशिका –

उत्तर

15

त्रुटि लॉग को अक्षम करने के लिए वाक्यविन्यास ठीक है, लेकिन docs बताता है कि कॉन्फ़िगरेशन पढ़ने से पहले एक डिफ़ॉल्ट लॉगफाइल का उपयोग किया जाता है। (जो उचित लगता है क्योंकि यह अन्यथा आपको बताएगा कि आपको अपनी कॉन्फ़िगरेशन में कोई त्रुटि है)

इस फ़ाइल को nginx चलाने वाले उपयोगकर्ता के लिए सही अनुमतियों के साथ हाथ से बनाने का प्रयास करें। या रूट को रूट के रूप में शुरू करने का प्रयास करें।

/home/ubuntu/nginx/sbin/nginx -c /home/ubuntu/nginx/conf/nginx.conf -p /home/ubuntu/nginx 

यह किसी भी लॉग पथ उपसर्ग निर्देशिका के साथ config में निर्दिष्ट पहले जोड़ें देगा:

+0

मैंने यही किया है । सही लॉग स्थान सेट करने के लिए nginx संकलित करते समय --prefix का उपयोग करें और मेरी nginx सेवा को स्थापित करते समय फ़ोल्डर बनाएं। –

+0

'$ sudo chmod a + w /var/log/nginx/access.log/var/log/nginx/त्रुटि .log' की मदद करनी चाहिए, लेकिन स्रोत से nginx संकलित करना अधिक व्यवहार्य समाधान लगता है। –

+0

अभी भी इसे एक्सेस करने में असमर्थ है। मैंने 'www-data: www-data' को' chown''d किया था, लेकिन इससे मदद नहीं मिली। कौन सा उपयोगकर्ता और समूह को फाइलों का होना चाहिए? – IIllIIll

13

मैं जब nginx, उदा, शुरू करने -p पैरामीटर का उपयोग कर इस समस्या को हल किया।

+1

उपसर्ग समाधान मेरे लिए काम करता है :) मैंने उपसर्ग निर्देशिका को उस व्यक्ति में बदल दिया है जिसमें लेखन अनुमति है! धन्यवाद! – zvjerka24

+0

यह बस काम नहीं करता है :( –

+2

आपको इसे काम करने के लिए '-p' सेट करने की आवश्यकता नहीं है। लेकिन सुनिश्चित करें कि' error_log' nginx कॉन्फ़िगरेशन के * शीर्ष स्तर * पर सेट है। आपको अभी भी मिल जाएगा 'nginx: [चेतावनी] त्रुटि लॉग फ़ाइल नहीं खोल सका: खोलें()" /usr/nginx/logs/error.log "', लेकिन '[चेतावनी] 'एक गंभीर त्रुटि नहीं है और आपका सर्वर वैसे भी शुरू होगा। nginx 1.4 के साथ। – nh2

0

आप -p उपसर्ग निर्दिष्ट करके समस्या का समाधान नहीं कर सकते हैं; क्योंकि यह केवल कॉन्फ़िगरेशन फ़ाइल में निर्देशों पर लागू होगा; और जैसा कि रिकीए ने पहले ही नोट किया है कि समस्या यह है कि एक संकलित त्रुटि लॉग है कि nginx कॉन्फ़िगरेशन खोलने से पहले भी खोलना चाहता है। संकलित-त्रुटि त्रुटि लॉग की अनुमति बदलना स्पष्ट कारणों से आदर्श नहीं है।

$ nginx -p . -g 'error_log error.log;' 

या

$ nginx -p . -g 'error_log stderr;' 

तुम अब भी एक [चेतावनी] मिल जाएगा लेकिन कम से कम यह मेरे लिए अनुमति दी:

का संभावित हल कमांड लाइन पर एक विन्यास के रूप में त्रुटि लॉग निर्दिष्ट करने के लिए है उबंटू पर गैर-रूट के रूप में nginx शुरू करने के लिए।

+0

मैक पर काम नहीं कर रहा है, fyi। – pschuegr

1

मैं सिर्फ यह कॉन्फ़िगर पैरामीटर का उपयोग करके इस हल:

./configure --prefix="$HOME/nginx" --error-log-path=/dev/stderr 

जब से मैं एक डेमॉन के रूप में इस nginx का उपयोग करें और हमेशा एक खोल में यह कभी भी नहीं चला है, यह समझ में आता है यह stderr करने के लिए त्रुटियों लॉग इन करने के लिए।

0

प्रति this post on the nginx.org mailing list (नीचे उद्धृत निकालें), %%ERROR_LOG_PATH%% संकलन विकल्प के रूप में सेट किया गया है, और स्टार्टअप पर तत्काल जांच किया गया है, जिससे "अलर्ट नहीं खोल सका"। उपसर्ग निर्दिष्ट करना (-p के साथ) चेतावनी को दबाने में मदद कर सकता है, लेकिन केवल यदि %%ERROR_LOG_PATH%%संकलित समय पर पथ के रूप में निर्दिष्ट किया गया था।

आप देख सकते हैं कि यह कैसे

nginx -V 2>&1 | grep -oE 'error-log-path=\S*'

साथ अपने वर्तमान निष्पादन में निर्दिष्ट किया जाता है यही कारण है कि समाधान @Michael द्वारा प्रस्तावित कुछ के लिए काम करता है, लेकिन दूसरों के लिए नहीं।

देखें बदलाव का:

nginx 0.7.53

साथ

परिवर्तन ...

*) बदलें: अब एक लॉग --error-लॉग-पथ द्वारा निर्धारित से बनाई गई है बहुत स्टार्ट-अप।

*) फ़ीचर: अब स्टार्ट अप त्रुटियां और चेतावनियां त्रुटि_लॉग और stderr पर आउटपुट की जाती हैं।

...

अब error_log मूल्य हमेशा शुरू समय त्रुटियों लॉग इन करने के लिए प्रयोग किया जाता में संकलित (और अगर nginx यह नहीं खोल सकता चेतावनी उत्सर्जन)। एक बार कॉन्फ़िगरेशन फ़ाइल पढ़ी गई है - इसके बजाय कॉन्फ़िगरेशन से error_log का उपयोग किया जाएगा।

यदि आपने उपसर्ग के सापेक्ष error_log पथ के साथ nginx संकलित किया है - -p स्विच के माध्यम से स्टार्टअप error_log को ओवरराइड करना संभव होना चाहिए।

मैक्सिम Dounin

संबंधित मुद्दे