চলমান প্রক্রিয়া থেকে ডামিনগিন্স কনফিগার করুন?


42

স্পষ্টতই, কোনও অ্যাপ্লিকেশন ডিবাগ করার চেষ্টা করে আমার নিদ্রাহীন রাত কাটা উচিত হয়নি। আমি আমার এনগিনেক্স পুনরায় চালু করতে চেয়েছি এবং আবিষ্কার করেছি যে এর কনফিগারেশন ফাইলটি খালি। আমি এটি কেটে ফেলার কথা মনে করি না, তবে চর্বিযুক্ত আঙ্গুলগুলি এবং মনোযোগ কমিয়ে দেওয়া সম্ভবত তাদের ভূমিকা পালন করেছিল।

আমার কাছে সেই কনফিগার ফাইলটির ব্যাকআপ নেই। আমি জানি আমার এটা করা উচিত ছিল।

আমার পক্ষে ভাল, বর্তমান এনগিনেক্স ডিমন এখনও চলছে। এর কনফিগারেশনটি কোনও কনফিগার ফাইলের মধ্যে ফেলে দেওয়ার কোনও উপায় আছে যা এটি পরে বুঝতে হবে?

উত্তর:


53

চলমান প্রক্রিয়াটির মেমরি অঞ্চলগুলি ডাম্প করার জন্য আপনার একটি জিডিবি ইনস্টল করা দরকার।

# Set pid of nginx master process here
pid=8192

# generate gdb commands from the process's memory mappings using awk
cat /proc/$pid/maps | awk '$6 !~ "^/" {split ($1,addrs,"-"); print "dump memory mem_" addrs[1] " 0x" addrs[1] " 0x" addrs[2] ;}END{print "quit"}' > gdb-commands

# use gdb with the -x option to dump these memory regions to mem_* files
gdb -p $pid -x gdb-commands

# look for some (any) nginx.conf text
grep worker_connections mem_*
grep server_name mem_*

আপনার "বাইনারি ফাইল mem_086cb000 মিল" এর মতো কিছু পাওয়া উচিত। এই ফাইলটি সম্পাদককে খুলুন, কনফিগারেশনের জন্য অনুসন্ধান করুন (যেমন "কর্মী_সংযোগ" নির্দেশিকা), অনুলিপি করুন এবং পেস্ট করুন। লাভ!

আপডেট: এই পদ্ধতিটি সম্পূর্ণ নির্ভরযোগ্য নয়। এটি এনগিনেক্স প্রক্রিয়াটি কনফিগারেশনটি পড়বে এবং পরে এই মেমরি অঞ্চলটি ওভাররাইট / পুনরায় ব্যবহার করবে না এমন অনুমানের উপর ভিত্তি করে। মাস্টার এনজিনেক্স প্রক্রিয়া আমাদের অনুমানের জন্য আমাদের সেরা সম্ভাবনা দেয়।


2
ধন্যবাদ, তবে এটি আমার পক্ষে খুব কঠিন। আমি স্ক্র্যাচ থেকে কনফিগার ফাইলটি আবার
লিখব

1
একটি এমএমএপি ফাইল একটি অপেরা ফাইলহ্যান্ডেল বোঝায়। একটি পুনরুদ্ধার করার সহজ উপায়ের
জেফ ফেরল্যান্ড

@ জেফফারল্যান্ড nginx কনফিগারেশন ফাইলের জন্য খোলার এফডি রাখবেন না।
কুপসন

হ্যাঁ, বেশিরভাগ অ্যাপ্লিকেশনগুলি ... ... মনে করে আমি উল্লেখ করার পরে আমার মন্তব্য সম্পাদনা করেছি। উফ।
জেফ ফেরল্যান্ড

1
এটা খুব কঠিন অনুভূত! আমি এখন অফিসিয়ালি হ্যাকার আপনার কনফিগারগুলি ফিরে পাওয়ার জন্য মেমরি পড়া। @Kupson ব্যাখ্যা করার জন্য ধন্যবাদ
adriaan

12

এটি এই অনুরোধে সহায়তা করবে না, তবে একই কারণে অন্যদের এখানে পৌঁছাতে সহায়তা করতে পারে। নতুন এনগিনেক্স সংস্করণগুলিতে মেমরি থেকে নয়, সমস্ত এনগিনেক্স কনফিগারেশন ফাইল থেকে পঠিত এনজিনেক্স কনফিগারেশন ডাম্প করার টি-টি বিকল্প রয়েছে :

nginx -T

অন্য সার্ভারের সাথে তুলনা করতে বা কনফিগারেশনের জন্য অনুসন্ধান করার জন্য কোনও কনফিগার ফাইলটি পড়ছে কিনা তা নিশ্চিত করতে এটি কার্যকর হতে পারে।

আবার এটি চলমান প্রক্রিয়া থেকে কনফিগারটিকে ডাম্প করবে না , কেবল নতুন প্রক্রিয়াটি কী চাপবে।


2

Ngx_conf_t কনফিগারেশন পার্সিংয়ের জন্য ব্যবহৃত একটি কাঠামোর একটি প্রকার। এটি কেবলমাত্র কনফিগারেশন পার্সিংয়ের সময় বিদ্যমান এবং কনফিগারেশন পার্সিং সম্পূর্ণ হওয়ার পরে আপনি অবশ্যই এটি অ্যাক্সেস করতে পারবেন না।


2
এটি 'স্পষ্টতই' অ্যাক্সেসযোগ্য কারণ কেবল স্পষ্টতই এনজিনেক্সে এই জাতীয় কোনও সুবিধা কার্যকর করা হয়নি; অন্যান্য প্রোগ্রামে যেমন সুবিধা রয়েছে যেমন postconf -nপোস্টফিক্স বা exim -bPএক্সিমের জন্য বা (খারাপ নাম দেওয়া হয়েছে) testparm -vসাম্বার জন্য ইত্যাদি।
জোসিপ রডিন

0

আদর্শ উপায় হ'ল ngx_conf_tএনগিনেক্স প্রক্রিয়া চিত্র থেকে কাঠামোটি সন্ধান করা ।

এটি এখানে সংজ্ঞায়িত করা হয়

http://trac.nginx.org/nginx/browser/nginx/trunk/src/core/ngx_conf_file.h#L166

আমার সি & জিডিবি সফল হয় তাই বাড়ির অন্য কেউ সমাধান নিয়ে আসতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.