شما برای مطالعه این مقاله فقط 5 دقیقه وقت نیاز دارید

systemd-service-in-linux
دسته بندی : آموزش لینوکس

آموزش ایجاد و مدیریت سرویس systemd در لینوکس

5/5 - (1 امتیاز)

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

اگر قصد ایجاد اسکریپت خاصی را دارید و می خواهید سرویس مربوط به آن به طور همزمان با ریستارت سیستم در پس زمینه اجرا شود، می توانید سرویس systemd آن را ایجاد کرده و از این ابزار برای  مدیریت سرویس موردنظر کمک بگیرید.

سرویس systemd چیست؟

سرویس یک واحد از برنامه است که معمولاً در پس زمینه اجرا می شود و بر اساس شرایط خاص شروع یا متوقف می شود.

Systemd ابزاری است که سرویس های سیستم لینوکس را طول پروسه بوت، راه اندازی و مدیریت می کند. نظارت و مدیریت چرخه عمر سرویس، مدیریت منابع و مدیریت وابستگی های هر سرویس از مهم ترین وظایف این ابزار است.

حالا به زبان ساده:

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

* البته توجه داشته باشید که محتویات فایل سرویس باید در یک قالب قابل درک برای systemd نوشته شود تا این ابزار قادر به انجام تسک موردنظر باشد.

ساختار فایل سرویس systemd

فایل سرویس systemd، یک فایل متنی ساده است که از ۳ بخش اصلی تشکیل شده است.بخش های اصلی فایل سرویس systemd

بخش اول – Unit

این بخش حاوی جزئیات و توضیحاتی در مورد سرویس است که این جزئیات به بخش های زیر تفکیک شده اند:

Description: این بخش برای نوشتن یک عنوان قابل خواندن توسط انسان لحاظ شده است.

After: وابستگی های لازم برای شروع سرویس موردنظر در این بخش مشخص می شود. به عنوان مثال، اگر می خواهید سرویس وب سرور شما بعد از آنلاین شدن شبکه شروع به کار کند، باید آن در این بخش مشخص کنید.

Before: اگر سرویس خاصی را در نظر دارید که می خواهید سرویس systemd، قبل از آن شروع به اجرا کند، باید آن را در این بخش لحاظ کنید. به عنوان مثال، سرویس وب سرور Apache قبل از شروع سرویس Nextcloud اجرا شود.

بخش دوم – Service

این بخش شامل جزئیاتی در مورد اجرا و خاتمه سرویس است و از بخش های زیر تشکیل شده است:

ExecStart: دستور یا مسیر اسکریپتی که می خواهید موقع استارت سرویس systemd،، اجرا شود را در این بخش وارد کنید.

ExecReload: این بخش برای تعیین نحوه ریستارت سرویس است و چون اختیاری است، اگر مکانیسم ریستارت خاصی را در نظر ندارید می توانید آن را خالی بگذارید.

Type: این فیلد نشان دهنده نوع استارت اپ سرویس موردنظر است که برای مقداردهی آن می توانید از گزینه های simple، exec، oneshot، dbus، notify و idle استفاده کنید.

Restart: ریستارت یکی دیگر از آپشن های اختیاری است که شرایط لازم برای انجام ریستارت را مشخص می کند. در واقع، این شما هستید که مشخص می کنید موقع بروز شرایطی مثل on-success ،on-failure ،on-abnormal یا on-abort ریستارت انجام شود یا اینکه با انتخاب گزینه no قابلیت ریستارت خودکار سرویس را غیرفعال کنید.

البته اگر از مقدار always استفاده کنید باید یک فیلد دیگر تحت عنوان RestartSec را هم مقداردهی کنید و فاصله زمانی (برحسب ثانیه) بین هر ریستارت را مشخص کنید.

بخش سوم – Install

هر زمان که خواستید سرویس موردنظر را با دستور systemctl فعال یا غیرفعال کنید، این بخش و داده های موجود در آن فراخوانی می شوند.

کلیک کنید  آموزش نصب سیستم عامل لینوکس (اوبونتو) در کنار ویندوز

فیلدهای بخش Install به صورت زیر هستند:

WantedBy: این فیلد مشابه فیلد After بخش Unit است و وابستگی های لازم برای فعال شدن سرویس را مشخص می کند. مقدار پیش فرض این فیلد multi-user.target است که نشان می دهد سرویس موردنظر باید هنگامی که سیستم به وضعیت چندکاربره می رسد، فعال شود.

RequiredBy: این فیلد هم شبیه WantedBy است. با این تفاوت که این فیلد در تعیین وابستگی ها سرسخت تر است و در صورت نقض آنها، سرویس از کار می افتد.

پیش نیازهای ایجاد سرویس systemd

نحوه راه اندازی سرویس systemd در لینوکس

برای ایجاد سرویس مربوط به اسکریپت، برنامه یا اپلیکیشن موردنظر خود، کافیست طبق مراحل زیر جلو بروید:

۱. ساخت فایل سرویس

  • با دستور cd در مسیر فایل های سرویس قرار بگیرید:
cd /etc/systemd/system
  • فایل سرویس را با اسم دلخواه و پسوند service. ایجاد کنید:
sudo touch my-app.service
  • فایل سرویس را با ویرایشگر nano باز کنید:
sudo nano my-service.service

در مورد اسکریپت موردنظر برای ایجاد سرویس تصمیم بگیرید و سپس آن را به یک اسکریپت قابل اجرا تبدیل کنید.

ما در این آموزش اسکریپت آپدیت سیستم توسط کاربر را بررسی می کنیم:

  • در مسیر /root/.scripts/ یک فایل با عنوان دلخواه و پسوند sh. ایجاد کنید: 
cd /root/.scripts/

sudo touch sys-update.sh

sudo nano sys-update.sh
  • کد زیر را به آن اضافه کنید:
#!/usr/bin/env bash

if [ ${EUID} -ne 0 ]
then
exit 1 
fi
apt-get update 1>/dev/null 2>>/root/logs/sys-update.log

در قسمت اول این اسکریپت، روت یا غیرروت بودن کاربر بررسی می شود و اگر کاربر روت باشد، دستور apt-get update اجرا می شود.

  • این فایل را به حالت قابل اجرا تبدیل کنید:
sudo chmod +x sys-update.sh

فایل پیکربندی مربوط به سرویس این اسکریپت را به صورت زیر تنظیم کنید:

sudo nano update-sys.service

[Unit]

Description=Keeping my system fresh

After=multi-user.target

[Service]

ExecStart=/usr/bin/bash /root/.scripts/sys-update.sh

Type=simple

[Install]

WantedBy=multi-user.target


۲. بارگذاری مجدد systemd

بعد از ایجاد فایل سرویس، باید لیست فایل های سرویس systemd را مجدداً بارگذاری کنید:

sudo systemctl daemon-reload

با این کار، systemd از وجود این فایل سرویس جدید باخبر می شود.

۳. فعال سازی سرویس systemd

اکنون می توانید سرویس موردنظر خود را فعال کنید:

sudo systemctl enable update-sys.service

۴. بررسی وضعیت سرویس

برای اینکه از استارت سرویس موردنظر مطمئن شوید باید وضعیت اجرای آن را بررسی کنید که برای این کار می توانید از دستور زیر استفاده کنید:

sudo systemctl status update-sys.service

با مشاهده پیام سبز رنگ active در خروجی این دستور می توانید از اجرای موفقیت آمیز این سرویس مطمئن شوید.

از این به بعد با هر بار ریستارت سیستم لینوکس، سرویس آپدیت هم شروع به کار می کند و مدیریت آن توسط ابزار systemd انجام می شود.

اگر سرویس دیگری را برای اسکریپت های خاص خود ایجاد کرده اید، پروسه ارسال یا توقف آن هم بر اساس شرایطی که توسط فیلدهای فایل پیکربندی مثل after، before و WantedBy تنظیم کرده اید، پیش می رود.

نحوه غیرفعال سازی سرویس systemd

شما می توانید هر زمان که خواستید سرویس موردنظر را با دستور زیر غیرفعال کنید:

sudo systemctl disable update-sys.service

این دستور باعث حذف فایل سرویس موردنظر می شود و دفعه بعد که سیستم ریبوت می شود، ابزار systemd نمی تواند فایل پیکربندی مربوط به آن را پیدا کند. پس خبری از استارت خودکار این سرویس نخواهد بود.

بعد از اینکه سرویس موردنظر را غیرفعال کردید، باید با استفاده از دستور زیر، فایل های سیستم را مجدداً بارگذاری کنید:

sudo systemctl daemon-reload

ولی اگر صرفاً می خواهید سرویس موردنظر را متوقف کنید و قصد حذف آن را ندارید، بهتر است از stop استفاده کنید:

sudo systemctl stop update-sys.service

سخن آخر

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

مطالب مشابهی که شاید علاقمند باشید

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

دیدگاه های شما

برای دریافت این مقاله لطفا ایمیلتان را وارد کنید

می توانید مقاله را دانلود کنید یا پرینت بگیرید