چگونه می توان خدمات راه‌اندازی بوت را در RHEL / CentOS 7 شروع کرد؟

نمی دانید که چگونه خدمات را در پس زمینه یا در بوت مدیریت کنید?


مکانیسم مدیریت و شروع فرآیندهای روی بوت تغییر کرده است. تا قبل از RHEL / CentOS 6.x ، شما می توانستید یک اسکریپت را در /etc/init.d/ ایجاد کنید و به کمک chkconfig فعال کنید اما همه چیز متفاوت است RHEL 7.

این سیستم عامل جایگزین شده است و از آنجا که کم و بیش مدیر پردازش پیش فرض در نسخه های اصلی لینوکس است ، سیستم مدیریتی با سایر فالوورها در خانه احساس راحتی می کند. در این مقاله بررسی خواهیم کرد که systemd چیست ، دلایل سوئیچ چیست و نحوه استفاده از systemd برای تنظیم ، اجرای و مدیریت فرایندهای پس زمینه با آن.

سیستمی چیست?

از آنجا که هر فرآیند در لینوکس به وضوح قابل مشاهده است ، بیایید ببینیم که systemd در کمین چه چیزی است. در سیستم من موارد زیر را دریافت می کنم:

$ ps -ef | grep systemd
root 1 0 0 Nov11؟ 00:01:02 / lib / systemd / systemd –system –deserialize 22
پیام + 768 1 0 Nov11؟ 00:05:46 / usr / bin / dbus-daemon –system –address = systemd: –nofork –nopidfile – سیستم فعال سازی –syslog-only
root 805 1 0 Nov11؟ 00:10:22 / lib / systemd / systemd-logind
ankush 1132 1 0 Nov11؟ 00:00:00 / lib / systemd / systemd –user
ankush 1176 1132 0 Nov11؟ 00:04:50 / usr / bin / dbus-daemon –session –address = systemd: –nofork –nopidfile – سیستم فعال سازی –syslog-only
ankush 9772 20029 0 21:11 pts / 6 00:00:00 grep – colour = auto systemd
systemd + 17298 1 0 Nov19؟ 00:00:12 / lib / systemd / systemdelled
systemd + 17303 1 0 Nov19؟ 00:00:00 / lib / systemd / systemd-timesyncd
root 17307 1 0 Nov19؟ 00:00:02 / lib / systemd / systemd-ژورنال
root 18182 1 0 Nov19؟ 00:00:00 / lib / systemd / systemd-udevd

شرط می بندم که فوراً متوجه آن شدید. اولین فرآیند در لیست به عنوان ریشه کاربر راه اندازی شد و دارای pid 1 است.

مطمئناً ، این اولین فرایندی بود که سیستم با استفاده از آن شروع به کار کرد. سلام به سیستمی. ��

بنابراین ، کاملاً ساده ، سیستمی فرآیند “مادر” است که علاوه بر ارائه اطلاعات در مورد ورود به سیستم ، وضعیت سیستم فایل ها و غیره ، فرآیندهای دیگر را در سیستم راه اندازی ، مدیریت و خاتمه می دهد..

یادداشت در مورد نام ، هر چند. این نام در واقع سیستمی است و نه سیستم D یا هر چیز دیگری. “d” مخفف Daemon است ، یک فرایند استاندارد لینوکس که در پس زمینه کار می کند (کمین؟) است و به هیچ جلسه پایانی وصل نمی شود.

چرا RHEL به سیستم تغییر یافته است?

همانطور که قبلاً بحث کردیم ، systemd یک مدیر سیستم و فرآیند است و در RHEL 7 جایگزین برنامه شناخته شده Upstart می شود. چرا RHEL (اوراکل؟) این تصمیم را گرفت؟ خوب ، دلایل بسیار خوبی برای این وجود دارد ، بنابراین اجازه دهید نگاهی اجمالی بیندازیم.

اولیه سازی خدمات موازی

برنامه system SysV را که دوست ندارد ، systemd قادر است خدمات را به صورت موازی راه اندازی کند. در عوض ، برنامه init آنها را یکی یکی راه اندازی می کند. در عصری که حتی دستگاه های تلفن همراه دارای پردازنده های چند هسته ای هستند ، نبود اولیه سازی موازی یک خاموش بزرگ است.

مدیریت سرویس پویا (داغ)

اگر متوجه شده اید که درایوهای USB به صراحت باید روی سیستم های Fedora قبلی نصب شوند ، در حالی که بطور خودکار روی اوبونتو و توزیع های مشابه باز می شوند ، دلیل این سیستم وجود دارد. این نرم افزار قادر به تشخیص تغییرات زنده در سخت افزار بوده و در صورت لزوم خدمات را خاتمه می دهد. برخی می توانند ادعا کنند که این غیر ضروری است ، اما برای بسیاری ، هر چیزی که باعث کاهش بار شناختی شود مورد استقبال قرار می گیرد.

راه اندازی خدمات معوق

systemd زمان بوت شدن را کوتاه تر می کند زیرا می تواند خدمات را به هنگام نیاز به تعویق بیاندازد. یک مثال ساده خدمات مربوط به سیستم فایل شبکه است. اگر دیسک شبکه ای در دسترس نباشد ، منطقی نیست که یک سرویس را اجرا و اجرا کنید.

ارتباط سریعتر فرآیند

قابلیت های موازی سیستمد به ارتباطات درون فرآیند منتهی می شود. systemd قادر است دسترسی موازی به پریزها و اتوبوس سیستم را ارائه دهد و باعث کاهش چشمگیر زمان انتظار برای منابع ارتباطی می شود.

راه اندازی مجدد خودکار

اگر یک سرویس خراب شود ، systemd می تواند آن را تشخیص داده و اقدام به راه اندازی مجدد آن کند. در اکثر اوقات ، یک راه اندازی مجدد ساده تمام مواردی است که برای شروع یک برنامه کاربردی مجدداً مورد نیاز است ، مگر اینکه موارد اساسی تری وجود داشته باشد.

به هر حال ، systemd باعث می شود زندگی یک sysadmin در اینجا آسانتر شود.

systemd در RHEL7 – چه چیزی برای Sysadmins تغییر می کند?

اگر احساس ناخوشایندی دارید که سیستم به نظر نمی رسد همه زنگ و سوت باشد ، درست است. ناسازگاریهای قابل توجهی وجود دارد که می تواند باعث تعجب سیسادمین RHEL شود. بیایید نگاهی گذرا داشته باشیم.

پشتیبانی محدود از runlevel

systemd دارای یک رسم و رسم بسیار خوبی برای حمایت از runlevels می باشد. همه سطح های پشتیبانی نشده پشتیبانی می شوند ، و برای برخی از اهداف حتی ممکن است هیچ یک وجود نداشته باشد. در چنین مواردی ، سیستم “N” را به عنوان پاسخی به دستورات runlevel برمی گرداند و نشان می دهد که هیچ سطح مشخصی از این هدف ندارد. در کل ، رد هت به ما توصیه می کند که از دستورات runlevel (!) استفاده نکنید.

هیچ دستور سفارشی وجود ندارد

این یکی صدمه دیده است یک نکته مهم دیگر با SysV ، امکان تعریف فرامین سفارشی برای ارائه عملکرد بهتر برای مدیریت فرایندها بود. با استفاده از سیستم ، چنین گزینه ای وجود ندارد و شما با شروع ، توقف ، وضعیت ، راه اندازی مجدد و غیره گیر کرده اید.

فقط خانواده و غیر تعامل

systemd (البته) روند کارهایی را که راه اندازی کرده است نگه می دارد و PID های آنها را ذخیره می کند. با این حال ، این چالش این است که سیستماتیک نمی تواند با فرآیندی که توسط آن راه اندازی نشده است مقابله کند. بعلاوه ، امکان تعامل کاربر با فرآیند شروع شده توسط systemd امکان پذیر نیست. همه خروجی ها به / dev / null می روند ، و به طور موثری متوقف می شوند و هر امیدی را که احتمالاً نسبت به گرفتن خروجی دارید داشته باشید.

هیچ زمینه ای نیست

بر خلاف سرویس های اولیه ، آنهایی که توسط systemd راه اندازی می شوند هیچ گونه محیطی را از هر کاربر در سیستم به ارث نمی برند. به عبارت دیگر ، اطلاعاتی مانند PATH و سایر متغیرهای سیستم در دسترس نیستند و هر فرآیند جدید در زمینه خالی راه اندازی می شود.

اگر این لیست محدودیت ها باعث گریه شما می شود ، شما دیگر تنها نیستید. systemd در جهان لینوکس یک نیروی قطبی بوده است و Googling در مورد “سیستم های مکیده” بسیاری از مطالب خواندن را کشف خواهد کرد. ��

نحوه شروع سرویس به صورت خودکار هنگام پایین آمدن?

در اینجا یک مورد کاربرد بسیار متداول در استقرار وجود دارد. ما باید با زبانی که فرآیندهای طولانی مدت نداشته باشد ، از یک برنامه کمرنگ تر استفاده کنیم: PHP! بیایید فرض کنیم من یک اسکریپت PHP برای رسیدگی به اتصالات وب ورودی دریافت کرده ام (ما یک برنامه چت رو ساخته ایم!) و اسکریپت در /home/ankush/chat_server/index.php قرار داده شده است.

از آنجا که اتصالات وب می تواند در هر زمان به سرور ضربه بخورد ، این روند باید همیشه فعال باشد و بر اتصالات ورودی نظارت کند. ما نمی توانیم چرخه زندگی سنتی PHP را در اینجا داشته باشیم زیرا WebSockets اتصالات حالت پذیر است و اگر اسکریپت از بین برود ، اتصال یک لیست است. به هر حال ، به اندازه کافی روی صندلی های شبکه بیایید ببینیم که چگونه ما می خواهیم از این سیستم اسکریپت استفاده کنیم.

تمام خدمات سیستم شده در / etc / systemd / system اقامت دارند ، بنابراین اجازه می دهیم پرونده ای را در آنجا ایجاد کنیم تا اسکریپت سرور وب سرور ما را توصیف کنیم. با فرض اینکه شما به عنوان کاربر اصلی وارد سیستم شده اید.

# vi /etc/systemd/system/chat_server.service

و بعد موارد زیر لازم است.

[واحد]
توضیحات = سرویس سرور گپ
پس از = network.target

[سرویس]
نوع = ساده
کاربر = ankush
ExecStart = php /home/ankush/chat_server/index.php
راه اندازی مجدد = در هنگام قطع شدن

[نصب]
WantedBy = multi-user.target

فایل را ذخیره کنید و مرحله بعدی بارگذاری مجدد سیستم Daemon systemd است

# systemctl daemon-بارگیری مجدد

و برای شروع خدمتی که اخیراً ایجاد کردیم:

# systemctl شروع گپ_سرور

اگر خطایی نمی بینید ، همین بود!

بیایید به سرعت نگاهی بیندازیم که دستورالعملهای مختلف در پرونده به چه معنی است:

  • قسمت [Unit] واحد خدمات جدیدی را برای systemd تعریف می کند. در مجله سامانه ای ، تمام خدمات به عنوان واحد خدمات شناخته می شوند.
  • این دستورالعمل After (به طور قابل پیش بینی) به سیستماتیک می گوید که این سرویس را تنها پس از راه اندازی سرویس های شبکه راه اندازی می کند (در غیر این صورت ، چه کسی رسیدگی به سطح سوکت را در سطح پایین تر انجام خواهد داد؟.
  • Type = ساده به سیستم می گوید که این سرویس قرار نیست خودش را چنگ بزند. به عبارت دیگر ، هر زمان معین فقط یک نمونه اجرا می شود.
  • کاربر = ankush بدان معنی است که این سرویس به عنوان “ankush” کاربر اجرا می شود. ما می توانیم این مسئله را به “ریشه” تغییر دهیم ، اما از دیدگاه امنیتی کاملاً قابل توجه نیست.
  • همانطور که می توانید بگویید ، ExecStart دستور واقعی برای اجرای است.
  • راه اندازی مجدد = در هنگام سقط به معنای این است که این سرویس باید هنگام شروع کار مجدداً راه اندازی شود. در PHP ، فرآیندهای طولانی مدت حافظه را نشت می دهند و در نهایت منفجر می شوند ، بنابراین این مورد نیاز است.
  • WantedBy = بخشنامه به systemd می گوید که این سرویس بخشی از هدف است (به گروه ها فکر کنید). این منجر به ایجاد پیوندهای نمادین در آن قسمت می شود تا به این سرویس اشاره کنند.

به طور کلی ، این مقدار برای اجرای فرایندهای پس زمینه با استفاده از systemd در RHEL 7 کافی است.

گزینه بیشتر برای راه اندازی مجدد منطق

در مثال بالا ، من Restart = on-abort را پیکربندی کرده ام ، اما این تنها گزینه نیست. تعداد بیشتری وجود دارد و براساس نیاز انتخاب می کنید.

  • عدم موفقیت – هنگامی که کد خروجی یا سیگنال نجس مجدداً راه اندازی می شود
  • همیشه – در صورت یافتن سیگنال تمیز یا ناخوشایند ، مجدداً راه اندازی کنید
  • غیر طبیعی – سیگنال نجس ، نگهبان یا توقف وقت
  • موفقیت – فقط هنگامی که با یک سیگنال تمیز یا کد خروج متوقف شده است

پیکربندی سرویس برای شروع در بوت

هنگامی که شما از فیلمنامه راضی شوید و اطمینان حاصل کنید که آن کار می کند ، بعد می خواهید پیکربندی کنید که به این ترتیب شروع به کار کند و شروع به کار کند.

به / etc / systemd / system بروید و دستور زیر را فعال کنید (فراموش نکنید که نام پرونده. service service را با شخصی که دارید تغییر دهید)

# systemctl chat_server.service را فعال کنید

تأیید می کنید که یک سیم پیوند ایجاد کرده است.

ایجاد پیوند از /etc/systemd/system/multi-user.target.wants/chat_server.service به /etc/systemd/system/chat_server.service.

سرور خود را مجدداً راه اندازی کنید و باید ببینید سرویس از روی بوت شروع می شود.

آن آسان بود! اینطور نیست?

کمک! من به صورت انبوه در Upstart سرمایه گذاری کرده ام. ��

می فهمم شما به من اعتماد دارید ، پرونده شما یک امر عادی است نه استثنا. RHEL مدتی است که از Upstart استفاده می کند تا این سوئیچ تقریباً خیانت کند. اما سلام ، سیستم ها در حال تغییر هستند ، و ما نباید روی چیزهای کوچک تلاش کنیم. رد هت تصدیق می کند که بسیاری از مردم با نسخه های قدیمی گیر کرده اند ، و ایجاد کرده اند راهنمای مهاجرت که قطعاً باید به آن رجوع کنید.

یکی از مزایای صرفه جویی در همه این موارد این است که systemd با اسکریپت های SysV init سازگار است ، بنابراین در بیشتر موارد ، به سادگی باید فایل های خود را جابجا کنید و همان سرویس ها را اجرا کنید..

آیا علاقه مند به کسب اطلاعات بیشتر در مورد مدیریت لینوکس و عیب یابی هستید؟ اینو ببین دوره آنلاین.

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map