সিস্টেমযুক্ত পরিষেবা নির্ভরতা কীভাবে সেট করবেন?


17

CentOS 7 সিস্টেম বুট nginx সময় নিম্নলিখিত ত্রুটি সহ ব্যর্থ হয়:

2014/08/04 17:27:34 [emerg] 790#0: bind() to a.b.c.d:443 failed (99: Cannot assign requested address)

আমার সন্দেহ হয় যে এসএসএল-এর মাধ্যমে কোনও ভোস্ট সরবরাহ করার জন্য সেই আইপি ঠিকানাটিকে আবদ্ধ করার চেষ্টা করার আগে নেটওয়ার্ক ইন্টারফেসগুলি এখনও পর্যন্ত না উঠার কারণে এটি ঘটছে।

আমার অনুমান যে আমার নেটওয়ার্ক.সেবারিক্সকে nginx.service এর প্রয়োজন হিসাবে নির্দিষ্ট করতে হবে, তবে আমি / / etc / systemd / এ মোটেও নেটওয়ার্ক পরিষেবা খুঁজে পাই না।

আমি কীভাবে সার্ভিস অর্ডার বা সিস্টেমডে নির্ভরতা কনফিগার করতে পারি?


1
আপনি কি আদেশের চেয়ে পরিষেবা নির্ভরতা খুঁজছেন না ?
একটি সিভিএন 4'14

ভাল যুক্তি! আপডেট করা হয়েছে।
ভিনসেন্ট.ও

1
এটি সাহায্য করতে পারে: সার্ভারফল্ট
প্রশ্ন

ধন্যবাদ, এটি সমাধান করে! এটিকে উত্তরে রাখার মন আছে যাতে আমি এটি বন্ধ করতে পারি? :)
ভিনসেন্ট.ও

আমার উত্তর মুছে ফেলেছে। উত্তরটির উত্স পোস্ট করা হয়েছে (মি। হ্যাম্পটন)। তার সঠিক উত্তর হিসাবে চিহ্নিত করা উচিত।
বেলমিন ফার্নান্দেজ 4'14

উত্তর:


19

আপনি অন্তত প্রয়োজন, After=network.targetমধ্যে [Unit]আপনার ইউনিট ফাইলের অধ্যায়, তা নিশ্চিত করার জন্য নেটওয়ার্ক nginx শুরু করার আগে আপ হয়। আপনার ইউনিট ফাইলটি কেন নেই তা আমার কোনও ধারণা নেই।

ফেডোরার পাঠানো হিসাবে আমার হস্ত ফেডোরা সিস্টেমের সম্পূর্ণ উদাহরণ এখানে দেওয়া হয়েছে:

[Unit]
Description=The nginx HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

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

1
মজাদার. আমি তাকে একটি নোট ফেলে দেব এবং সমস্যাটি সম্পর্কে তাকে জানাতে চাই। তার প্যাকেজগুলি সাধারণত খুব উচ্চমানের এবং আমি কীভাবে সে এটি মিস করেছি তা নিশ্চিত নই।
মাইকেল হ্যাম্পটন

দুর্দান্ত পরামর্শ, সম্পন্ন।
ভিনসেন্ট.ও

5

ত্রুটি লগ থেকে, এটি আপনার এনগিনেক্স কনফিগার মত দেখাচ্ছে। সুস্পষ্ট আইপি ঠিকানার সাথে ফাইলটির শোনার নির্দেশনা রয়েছে:

listen a.b.c.d:443

এর অর্থ হল আপনার নেটওয়ার্ক ইন্টারফেসটি শেষ না হওয়া পর্যন্ত এবং আইপি এবিসিডি ইন্টারফেসের জন্য নির্ধারিত না করা হলে এনজিনেক্স শুরু হবে না ।

আপনার দুটি বিকল্প রয়েছে:

  • শোনার নির্দেশকে এতে পরিবর্তন করুন: শুনুন 443; (সমস্ত আইপি ঠিকানার সাথে আবদ্ধ)
  • নেটওয়ার্ক -অনলাইন.টিজারেটের উপর নির্ভর করে এনজিনেক্স

Http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/ এ বর্ণিত হিসাবে নেটওয়ার্ক.টারাগেট কেবলমাত্র ইঙ্গিত করে যে নেটওয়ার্ক ম্যানেজমেন্ট স্ট্যাক সমাপ্ত [...] কোনও নেটওয়ার্ক ইন্টারফেস ইতিমধ্যে কনফিগার করা হয়েছে কিনা তা পৌঁছে যাওয়ার পরে? অনির্ধারিত.

আপনি যদি নিশ্চিত করতে চান যে আইপি ঠিকানাটি ইতিমধ্যে নির্ধারিত হয়েছে এবং ইন্টারফেসটি সমাপ্ত হয়েছে, আপনাকে আপনার এনজিঙ্ক্সের সিস্টেমড ইউনিট ফাইলে নেটওয়ার্ক -অনলাইন.টারেট যুক্ত করতে হবে।

আপনার /etc/systemd/system/m Multi-user.target.wants/nginx.service ফাইলের পরে = এবং প্রয়োজনীয়গুলি = লাইনগুলিতে নেটওয়ার্ক-অনলাইন.আরগেট থাকতে হবে।

[Unit]
Description=The nginx HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target network-online.target
Requires=network-online.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

1
উল্লেখের জন্য +1 network-online.target- কেউ যদি ভাবছেনও: হ্যাঁ, উভয়ই Requires=এবং After=কারণ এটিRequires= (তর্কাত্মকভাবে আশ্চর্যজনকভাবে) প্রয়োজনীয় ইউনিট এবং প্রয়োজনীয় সংস্থার মধ্যে অর্ডার বোঝায় না।
ম্যাক্সচলেপজিগ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.