উবুন্টুতে কনফিগারেশন পরীক্ষা সফল হওয়ার পরে আমি কীভাবে পুনরায় চালু করব?


111

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

এটি রোধ করতে, আমি প্রথমে এনজিনেক্স কনফিগারেশন পরীক্ষা চালাচ্ছি:

nginx -t

পরীক্ষাটি সফলভাবে চালানোর পরে, আমি পরিষেবাটি আবার চালু করতে পারলাম:

/etc/init.d/nginx restart

অথবা পুনরায় চালু না করেই কেবল এনগেক্স সাইটের কনফিগারগুলি পুনরায় লোড করুন:

nginx -s reload

কনফিগারেশন পরীক্ষার ফলাফলের পুনঃসূচনা কমান্ডটি শর্তযুক্ত যেখানে এই দুটি কমান্ড একত্রিত করার কোন উপায় আছে?

আমি এটি অনলাইনে খুঁজে পেলাম না এবং এটি সম্পর্কে সরকারী ডকুমেন্টেশন বরং মূল বিষয়। আমি লিনাক্সকে ঘিরে আমার পথটি জানি না, তাই আমি যা জানিনা তা আমার সামনে সঠিক কিনা বা আদৌ সম্ভব নয় কিনা তাও আমি জানি না।

আমি nginx v1.1.19 ব্যবহার করছি।


একটি ছোট শেল স্ক্রিপ্ট সম্পর্কে কী যা এনগিনেক্স -t (with? সহ) এর রিটার্নের স্থিতি পরীক্ষা করে এবং তারপরে রিটার্নের অবস্থার উপর নির্ভর করে পুনরায় চালু করা যায়?
টেলিট

উত্তর:


49

প্রকৃতপক্ষে, যতদূর আমি জানি, এনজিনেক্স একটি খালি বার্তা প্রদর্শন করবে এবং কনফিগারেশনটি খারাপ হলে এটি পুনরায় আরম্ভ হবে না।

এটিকে স্ক্রু করার একমাত্র উপায় হ'ল এনজিনেক্স স্টপ করে আবার শুরু করা। এটি থামাতে সফল হবে, তবে শুরু করতে ব্যর্থ।


1
আপনি কোন সংস্করণটির কথা বলছেন? আমি v 1.1.19 এর সাথে কাজ করছি এবং এটি কনফিগার ফাইলগুলিতে কোনও ত্রুটি নির্বিশেষে পুনরায় চালু করার চেষ্টা করবে। এটি আমাকে জানিয়ে দেবে যে একটি সমস্যা আছে, তবে
ততক্ষণে

5
ঠিক আছে, আমি এটি পরীক্ষা করেছি, আমার ল্যাপটপে এনগিনেক্স ০.২ রয়েছে এবং এটি বর্ণনা হিসাবে কাজ করেছে, আমার ভিপিএসে আপনার মত 1.1.19 রয়েছে, এবং আপনি আপনার প্রশ্নে বর্ণিত হিসাবে এটি করেছেন। সুতরাং আমি অনুমান করি এটি 1.2 এ পরিচালনা করা হয়েছিল
মোহাম্মদ আবুশাদি

গ্রেট! আমার জন্য এটি বের করার জন্য ধন্যবাদ। আমি প্রশ্ন দেখতে আর একটু খোলেন তাহলে Noone nginx <v1.2 জন্য একটা উত্তর আছে চালিয়ে যাব
জানুয়ারী

1
আমি যাহাই হউক না কেন একটি অজুহাত তারপর :-) প্রয়োজন আপগ্রেড করতে হবে
জানুয়ারী

1
service nginx reloadকনফিগারটি সঠিকভাবে লোড হয়েছে কিনা তা কিছুই দেখায় না, সুতরাং আপনার যদি সন্দেহ হয় যে কনফিগারটি ভুল হতে পারে। service nginx restartসার্ভারটি বন্ধ করে দিবে যদি কনফিগটিতে ত্রুটি থাকে!
ড্যান ড্যাসক্লেস্কু

80

Nginx 1.8.0 হিসাবে, সঠিক সমাধানটি

sudo nginx -t && sudo service nginx reload

নোট করুন যে কোনও বাগের কারণে, configtest কনফিগার ফাইলটিতে ত্রুটি থাকলেও সর্বদা শূন্য প্রস্থান কোডটি ফেরত দেয়।


3
nginx -t && sudo nginx -s পুনরায় লোড
মেকানিজম

5
@ মেকানিসম: nginx -tঅনুমতি ত্রুটির কারণে সুডো ছাড়া প্রায় অবশ্যই ব্যর্থ হবে will
ড্যান ড্যাসক্লেস্কু

আমি পুনরায় লোড করার জন্য বেশিরভাগ শেষ অংশটি দেখাতে চেয়েছিলাম। আমার ক্ষেত্রে, আমি কাস্টম এনগিনেক্স সংকলন করেছি এবং /etc/init.d তে এবং কোনও স্ক্রিপ্টও নেই, সুতরাং আমার ক্ষেত্রে "পরিষেবা nginx পুনরায়লোড" কিছুই করবে না
মেকানিসম

39

আমি কনফিগারেশন পরীক্ষা সফল হলে কেবলমাত্র Nginx (সংস্করণ 1.5.9) পুনরায় লোড করতে নিম্নলিখিত কমান্ডটি ব্যবহার করি:

/etc/init.d/nginx configtest && sudo /etc/init.d/nginx reload

আপনার যদি প্রায়শই এটির প্রয়োজন হয় তবে আপনি একটি উপনাম ব্যবহার করতে পারেন। আমি নিম্নলিখিত ব্যবহার:

alias n='/etc/init.d/nginx configtest && sudo /etc/init.d/nginx reload'

এখানে কৌশলটি "&& "দ্বারা সম্পন্ন হয়েছে যা প্রথমটি সফল হলে কেবল দ্বিতীয় কমান্ড কার্যকর করে। আপনি এখানে দেখতে পারেন "&&" অপারেটরের ব্যবহারের আরও বিশদ ব্যাখ্যা ।

আপনি যদি সত্যই সার্ভারটি পুনরায় চালু করতে চান তবে আপনি "পুনরায় লোড করুন" এর পরিবর্তে "পুনঃসূচনা" ব্যবহার করতে পারেন।


এনগিনেক্স ১.৪.২ এর জন্য সাবধান থাকুন pkill -1 nginx(কনফিগারেশন ব্যর্থ হলে এবং বিভ্রান্তিকরভাবে সফলভাবে সফল হলে যদি পুনরায় লোড না হয় তবে কার্যকরভাবে আমার init.d / nginx পুনরায় লোড করে) খুঁজে পেয়েছি । আপনার নিজস্ব সংস্করণ পরীক্ষা করুন।
কেসিডি

2
এটি আমার পক্ষে কাজ করে না। উভয় কমান্ড পরীক্ষা ব্যর্থ হলেও কার্যকর করা হয়।
মারিও ক্যাম্পা


8
alias nginx.start='sudo nginx -c /etc/nginx/nginx.conf'
alias nginx.stop='sudo nginx -s stop'
alias nginx.reload='sudo nginx -s reload'
alias nginx.config='sudo nginx -t'
alias nginx.restart='nginx.config && nginx.stop && nginx.start'
alias nginx.errors='tail -250f /var/logs/nginx.error.log'
alias nginx.access='tail -250f /var/logs/nginx.access.log'
alias nginx.logs.default.access='tail -250f /var/logs/nginx.default.access.log'
alias nginx.logs.default-ssl.access='tail -250f /var/logs/nginx.default.ssl.log'

এবং তারপরে "nginx.reload" ইত্যাদি কমান্ড ব্যবহার করুন ..


6

আপনি /etc/init.d/nginx reloadএবং ব্যবহার করে পুনরায় লোড করতে পারেনsudo service nginx reload

যদি nginx -tকিছু ত্রুটি ছুড়ে ফেলে তবে তা পুনরায় লোড হবে না

সুতরাং & একই সাথে উভয় চালানোর জন্য ব্যবহার করুন

মত

nginx -t && /etc/init.d/nginx পুনরায় লোড


বাশ সম্পর্কে আপনাকে কিছু শেখাতে দিন। && run both at a same timeএটি পরিচালনা করে না যদি ডানদিকে কমান্ডটি চালিত হয় যদি বাম দিকের কমান্ডটি 0 এর একটি প্রস্থান কোড nginx -tদেয় your তার nginx -s reloadযাহাই হউক না কেন
miknik

@ মিকনিক আমার মনে হয় তিনি এটাই বলতে চেয়েছিলেন, এটি ঠিক বের হয় নি। তিনি বলেন If nginx -t throws some error then it won't reload। বিবৃতিটি run both at a same timeএকটি একক কমান্ড বা একটি লাইন হিসাবেও ব্যাখ্যা করা যেতে পারে। আমি ব্যাখ্যা না তাকে অগত্যা এই ক্ষেত্রে বলার অপেক্ষা রাখে না in parallel
ম্যাট

2

আপনি এনজিএনএক্স নিয়ন্ত্রণ করতে সিগন্যাল ব্যবহার করতে পারেন।

ডকুমেন্টেশন অনুসারে, আপনাকে এনজিএনএক্স মাস্টার প্রসেসে HUP সিগন্যাল প্রেরণ করতে হবে।

এইচইউপি - কনফিগারেশন পরিবর্তন করা, পরিবর্তিত সময় অঞ্চল (কেবলমাত্র ফ্রিবিএসডি এবং লিনাক্সের জন্য) রেখে, নতুন কনফিগারেশন দিয়ে নতুন কর্মী প্রসেস শুরু করা, পুরানো কর্মী প্রক্রিয়াগুলিকে গ্রেটফুট শাটডাউন

ডকুমেন্টেশন এখানে দেখুন: http://nginx.org/en/docs/control.html ml

আপনি এনজিএনএক্স মাস্টার প্রসেস পিআইডি তে HUP সিগন্যালটি প্রেরণ করতে পারেন:

kill -HUP $( cat /var/run/nginx.pid )

উপরের কমান্ডটি nginx পিআইডি থেকে পড়বে /var/run/nginx.pid। ডিফল্টরূপে এনজিনেক্স পিড লিখিত হয় /usr/local/nginx/logs/nginx.pidতবে এটি কনফিগারেশনে ওভাররাইড করা যায়। nginx.configএটি পিআইডি কোথায় সংরক্ষণ করে তা পরীক্ষা করে দেখুন।


1

কমপক্ষে ডেবিয়ানে এনগিনেক্স স্টার্টআপ স্ক্রিপ্টটির একটি পুনরায় লোড ফাংশন রয়েছে যা এটি করে:

reload)
  log_daemon_msg "Reloading $DESC configuration" "$NAME"
  test_nginx_config
  start-stop-daemon --stop --signal HUP --quiet --pidfile $PID \
   --oknodo --exec $DAEMON
  log_end_msg $?
  ;;

মনে হয় সব করতে প্রয়োজন চাই কল service nginx reloadপরিবর্তে restartযেহেতু এটি কল test_nginx_config


service nginx reloadকনফিগারেশনটি ঠিক আছে কিনা তা পরীক্ষা করা হয়েছে কিনা, বা এটি পুনরায় লোড হয়েছে কিনা তা নিয়ে কোনও প্রকারের ইঙ্গিত দেবে না।
ড্যান ড্যাসক্লেস্কু

সেক্ষেত্রে কী করবে test_nginx_config?
ডেইনি

1
আমার মনে হয় আপনার দুজনের একটা কথা আছে। service nginx reloadকমান্ড লাইনে যথেষ্ট, তবে কখনও কখনও আপনি stderr আউটপুট ক্যাপচার করতে পারেন এবং এটি সমস্যার সমাধানের জন্য কোনও স্ক্রিপ্টে ফিরে আসতে পারেন। nginx -tকোন ফাইলটির অবৈধ প্যারামিটার ছিল এবং কোন লাইনে তা আপনাকে বলবে।
অ্যানাস্টিমাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.