সেন্টস 7 বুট খুব দ্রুত এবং ক্রোন স্ক্রিপ্টগুলি কার্যকর করার সময় নেটওয়ার্ক প্রস্তুত হয় না


9

আমি মাত্র CentOS 6.5 থেকে 7.0 থেকে আপগ্রেড করেছি এবং নতুন systemdখুব সম্ভবত আমাকে সমস্যা দিচ্ছে বলে আমি খুব বেশি খুশি নই । মনে হচ্ছে এটি কেবলমাত্র খুব দ্রুত বুট হচ্ছে, অবিচ্ছিন্নভাবে প্রক্রিয়া শুরু করা এবং পরিষেবা নির্ভরতা স্ক্রু করা।

উদাহরণস্বরূপ আমার কয়েকটি স্ক্রিপ্ট সেটআপ রয়েছে crondযাতে একটি রিবুটের পরে ট্রিগার করা হয়:

@reboot    /root/scripts/check_gmail.sh
@reboot    /root/scripts/start_gps_listener.sh

এর ফলে সমস্ত ধরণের অদ্ভুত ত্রুটি হয় (কেবল তাদের মধ্যে একটি দেখায়):

Warning: stream_socket_client(): unable to connect to tcp://192.168.20.4:4001 
  (Network is unreachable) in /root/scripts/check_gmail.php on line 137
  ERROR: Network is unreachable (101)

উপরের দিকে আমি একটি টিসিপি সকেটে লিখছি। crondনেটওয়ার্কটি যথাযথভাবে আরম্ভের আগে নেটওয়ার্কটি শুরু হওয়ার আগে এটি আমার পক্ষে বেশ স্পষ্ট network is unreachable

একই জিনিস অ্যাপাচি এবং মাইএসকিউএল (মারিয়াডিবি) নিয়ে যায়। মাইএসকিউএল স্টার্টআপের জন্য বেশ ধীর (অনেক বেশি ডেটা) অর্থ crondহ'ল স্ক্রিপ্টগুলি যখন বলা হচ্ছে তখন মাইএসকিউএল ডাটাবেস চালু না হওয়ায় অ্যাপাচি এবং আমার প্রচুর স্টার্টআপ স্ক্রিপ্ট উভয়ই ব্যর্থ হচ্ছে।

আমি নির্ভরতা সেটআপ করার চেষ্টা করেছি কিন্তু কোনও ভাগ্য ছাড়াই; আমার সাথে সংযুক্ত networkএবং mysqlপরিষেবা রয়েছে [Unit](যেমন দেখা যায় systemctl list-dependencies)। মাইএসকিউএল চালু না হওয়া পর্যন্ত আদর্শভাবে সমস্ত পরিষেবা অপেক্ষায় থাকে:

vi /lib/systemd/system/httpd.service
  [Unit]
  Description=The Apache HTTP Server
  After=network.target remote-fs.target nss-lookup.target network.service mysql.service

vi /lib/systemd/system/crond.service
  [Unit]
  Description=Command Scheduler
  After=syslog.target auditd.service systemd-user-sessions.service time-sync.target network.service mysql.service

উপরের সাথে বুট করার সময় আমি একই ত্রুটিগুলি পাই। mailqক্রোন স্ক্রিপ্টগুলি প্রক্রিয়া করার সময় নেটওয়ার্ক / ডিএনএস প্রস্তুত না হওয়ায় আমি ইমেলগুলি এনেছি । শুরু হওয়ার কয়েক মিনিট পরে সেগুলি সঠিকভাবে প্রেরণ করা হয়।

পরিষেবাগুলি সঠিক ক্রমে চালিত হয়েছে তা নিশ্চিত করে কেউ এই অধিকার পেতে সহায়তা করতে পারে? এটি খুব ভুল বলে মনে হচ্ছে যে এটি এত দ্রুত বুট করা এবং আদর্শভাবে এটি এটি ভাল পুরানো উপায়ে করেছে, "একটি সিরিজ চালু হচ্ছে ... অপেক্ষা করুন ... একটি নতুন পরিষেবা চালু হচ্ছে ... অপেক্ষা করুন ... ইত্যাদি)।

মনে রাখবেন যে আমি নিশ্চিত নই systemdযে এটি আমার সমস্যা - এটি নেট থেকে আমি কী পড়তে পারি তা কেবল আমার তত্ত্ব।


আপনি কি আউটপুট পোস্ট করতে পারেন grep -i concurrency /etc/default/rcS? আমি আমার ডিআইডি সিস্টেমগুলি মিশ্রিত করতে পারি তবে আমি মনে করি যে প্রক্রিয়াগুলি একে অপরের সমাপ্তির জন্য অপেক্ষা করে কিনা তা নিয়ন্ত্রণ করে।
টেরডন

আমার সাথে কোনও ফাইল নেই/etc/default/rc*
DHS

দুঃখিত, CentOS সমতুল্য কোথায় হবে তা আমি জানি না। আমি এখানে ডেবিয়ান, যা পরিষেবাগুলিকে সমান্তরালভাবে শুরু করে তোলে তার জন্য কী বর্ণিত হয়েছে তা ভাবছিলাম । আপনার ক্ষেত্রে অনুরূপ কিছু সেট থাকতে পারে।
টেরডন

2
Requires=network.targetউপরের ইউনিটগুলিতে যুক্ত করার চেষ্টা করুন ।
কেসি

এখনও একই সমস্যা সন্নিবেশিত পর Requires=network.targetকরার জন্য/lib/systemd/system/crond.service
DHS

উত্তর:


10

আরও অনেক পড়ার পরে আমি সমাধানটি খুঁজে পেয়েছি যা আমার পক্ষে কাজ করে।

আমি এই গাইডটি পড়ি, নেটওয়ার্ক শেষ হওয়ার পরে চালনা পরিষেবাদি । গাইডের একটি সামান্য উদ্ধৃতি:

এটি নিশ্চিত করবে যে সমস্ত কনফিগার করা নেটওয়ার্ক ডিভাইস রয়েছে এবং বুট চালিয়ে যাওয়ার আগে একটি আইপি ঠিকানা বরাদ্দ রয়েছে।

এটি হ'ল আমি যা চেয়েছিলাম তাই আমি এই পরিষেবাটি সক্ষম করেছিলাম এবং পরিষেবা ফাইলে নির্ভরতার নিয়মটি এর জন্য নির্ধারণ করেছি crond:

[root@srv]# systemctl enable NetworkManager-wait-online

[root@srv]# vi /lib/systemd/system/crond.service
  Requires=network.target
  After=syslog.target auditd.service systemd-user-sessions.service time-sync.target network.target mysqld.service

যেমনটি এখানে প্রস্তাবিত হিসাবে একটি সার্ভিস তৈরি করার দরকার ছিল mysqldসেই পুরানো উপর ভিত্তি করে , systemctl সক্ষম করা সিস্টেমস্টিটাল শুরু থেকে পৃথক :init.dsystemd

[root@srv]# vi /lib/systemd/system/mysqld.service
  [Unit]
  Description=MySQL Server
  After=network.target
  [Service]
  Type=forking
  ExecStart=/etc/rc.d/init.d/mysql start
  ExecStop=/etc/rc.d/init.d/mysql stop
  [Install]
  WantedBy=multi-user.target

[root@srv]# systemctl daemon-reload
[root@srv]# chkconfig mysql off
[root@srv]# systemctl enable mysqld

এবং অবশেষে মাইএসকিউএল-এর পরে অ্যাপাচি পরিষেবাটি শুরু করার জন্য সেটআপ করুন :

[root@srv]# vi /lib/systemd/system/httpd.service
  Requires=mysqld.service
  After=network.target remote-fs.target nss-lookup.target mysqld.service

এটি আমার পক্ষে অন্তত কাজ করে।

আমি এই আদেশগুলি এটির পরে যাচাই করার জন্য ব্যবহার করেছি যেখানে আমি স্পষ্ট দেখতে পাচ্ছি যে কমপক্ষে মাইএসকিউএল এবং অ্যাপাচি আগে নেটওয়ার্ক শুরু হয়েছিল। আমি যদিও crondকোথাও দেখতে পাচ্ছি না তবে আমি দেখতে পাচ্ছি এটি আমার স্ক্রিপ্টগুলিতে কাজ করছে:

[root@srv]# systemd-analyze critical-chain
  multi-user.target @10.510s
    + httpd.service @10.344s +165ms
      + mysqld.service @9.277s +1.065s
        + network.target @9.273s
          + network.service @8.917s +355ms
            + iptables.service @444ms +157ms
              + basic.target @443ms
                [CUT]

আমি ব্যবহৃত অন্যান্য কয়েকটি দরকারী কমান্ড হ'ল:

# See exactly what takes how long (who to blame for the delay)
[root@srv]# systemd-analyze blame

# Check available names that can be used in the service files
[root@srv]# systemctl list-unit-files

যদি কেউ এর থেকে আরও ভাল উপায় দেখতে পায় তবে দয়া করে শেয়ার করুন।


আপনি এটির ডিবাগ করার জন্য যে আদেশগুলি ব্যবহার করেছিলেন তা পোস্ট করার জন্য +1। আমি সমস্যাগুলির সাথে একটি সত্যই বাজে গাঁটাকে সমাধান করতে সক্ষম হয়েছি systemd-analyze critical-chain। আমি কেবল এটি প্রায়শই ব্যবহার করতে যাচ্ছি না, তবে হঠাৎ বিক্রি হয়ে গেছে systemd। ধন্যবাদ!
ব্রায়ান শীর্ষে

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