آموزش systemd در آرچ لینوکس؛ مدیریت سرویسها و خدمات سیستم
در سیستمعامل لینوکس، بسیاری از قابلیتها و امکانات سیستم توسط برنامههایی اجرا میشوند که در پسزمینه فعالیت میکنند. برای مثال، مدیریت اتصال اینترنت، بلوتوث، سرویس SSH و زمانبندی برخی وظایف، به سرویسهای مختلفی وابسته است.
آخرین بهروزرسانی: ۲۰ آبان ۱۴۰۵ · نسخهٔ ۱ · ۷ بازدید
این مقاله مستندات رسمی Arch Linux نیست؛ برای موارد حساس به ArchWiki مراجعه کنید.
آموزش systemd در آرچ لینوکس؛ مدیریت سرویسها و خدمات سیستم
مقدمه
در سیستمعامل لینوکس، بسیاری از قابلیتها و امکانات سیستم توسط برنامههایی اجرا میشوند که در پسزمینه فعالیت میکنند. برای مثال، مدیریت اتصال اینترنت، بلوتوث، سرویس SSH و زمانبندی برخی وظایف، به سرویسهای مختلفی وابسته است.
در Arch Linux، ابزار اصلی مدیریت این سرویسها systemd نام دارد.
systemd وظیفه راهاندازی و مدیریت سرویسها و بخشهای مختلف سیستم را بر عهده دارد. کاربران میتوانند با استفاده از ابزار systemctl سرویسها را اجرا، متوقف، فعال یا غیرفعال کنند و وضعیت آنها را بررسی کنند.
در این آموزش از ARCHIHA، مهمترین دستورات systemd را به زبان ساده و همراه با مثال بررسی میکنیم.
۱. systemd چیست؟
systemd یک سیستم مدیریت و راهاندازی سرویسها در لینوکس است که پس از راهاندازی کرنل، بخشهای مختلف سیستم را مدیریت میکند.
این ابزار مسئولیتهای متعددی دارد، از جمله:
- راهاندازی سرویسهای سیستم
- مدیریت سرویسهای پسزمینه
- مدیریت وابستگی میان سرویسها
- ثبت و مدیریت گزارشهای سیستم
- اجرای وظایف زمانبندیشده
- مدیریت برخی منابع و امکانات سیستم
در Arch Linux، systemd بهصورت پیشفرض مورد استفاده قرار میگیرد.
برای تعامل با systemd معمولاً از دستور systemctl استفاده میکنیم.
۲. مشاهده وضعیت یک سرویس
اولین قدم برای مدیریت سرویسها، بررسی وضعیت آنهاست.
برای مشاهده وضعیت یک سرویس از دستور زیر استفاده کنید:
systemctl status service_name
بهعنوان مثال، برای بررسی وضعیت NetworkManager:
systemctl status NetworkManager
در خروجی این دستور اطلاعاتی مانند موارد زیر نمایش داده میشود:
- وضعیت فعلی سرویس
- شناسه پردازش یا PID
- زمان اجرای سرویس
- پیامهای مربوط به اجرای سرویس
- خطاهای احتمالی
وضعیتهای رایج سرویسها عبارتاند از:
| وضعیت | توضیح |
|---|---|
| active (running) | سرویس در حال اجراست |
| inactive (dead) | سرویس در حال حاضر اجرا نمیشود |
| failed | اجرای سرویس با خطا مواجه شده است |
| activating | سرویس در حال راهاندازی است |
| deactivating | سرویس در حال متوقف شدن است |
برای خروج از صفحه وضعیت، کلید q را فشار دهید.
۳. اجرای یک سرویس
اگر سرویسی متوقف باشد و بخواهید آن را اجرا کنید، از دستور start استفاده کنید:
sudo systemctl start service_name
مثلاً:
sudo systemctl start NetworkManager
با اجرای این دستور، سرویس NetworkManager شروع به فعالیت میکند.
نکته مهم این است که اجرای یک سرویس با فعالسازی خودکار آن هنگام روشن شدن سیستم تفاوت دارد. در بخشهای بعدی این تفاوت را بررسی میکنیم.
۴. متوقف کردن سرویس
برای متوقف کردن یک سرویس در حال اجرا:
sudo systemctl stop service_name
مثلاً:
sudo systemctl stop NetworkManager
پس از اجرای این دستور، سرویس متوقف میشود.
هشدار: پیش از متوقف کردن سرویسهای مهم، از تأثیر آنها روی سیستم مطمئن شوید. برای مثال، متوقف کردن NetworkManager ممکن است اتصال اینترنت شما را قطع کند.
۵. راهاندازی مجدد سرویس
گاهی پس از تغییر تنظیمات یک سرویس یا هنگام بروز مشکل، نیاز دارید آن را مجدداً راهاندازی کنید.
برای این کار از دستور زیر استفاده کنید:
sudo systemctl restart service_name
مثلاً:
sudo systemctl restart NetworkManager
این دستور سرویس را متوقف کرده و دوباره اجرا میکند.
توجه داشته باشید که راهاندازی مجدد ممکن است ارتباطات یا فعالیتهای وابسته به سرویس را برای مدت کوتاهی قطع کند.
۶. فعالسازی خودکار سرویس هنگام روشن شدن سیستم
یکی از قابلیتهای مهم systemd، امکان اجرای خودکار سرویسها هنگام بوت شدن سیستم است.
برای فعالسازی خودکار یک سرویس:
sudo systemctl enable service_name
مثلاً:
sudo systemctl enable NetworkManager
با این دستور، NetworkManager برای اجرا هنگام راهاندازی سیستم فعال میشود.
اگر میخواهید سرویس هماکنون اجرا شود و هم در بوتهای بعدی بهصورت خودکار اجرا شود، از دستور زیر استفاده کنید:
sudo systemctl enable --now service_name
مثال:
sudo systemctl enable --now NetworkManager
این دستور برای بسیاری از سرویسهایی که باید همیشه فعال باشند، کاربردی است.
۷. غیرفعال کردن اجرای خودکار سرویس
اگر نمیخواهید یک سرویس هنگام روشن شدن سیستم بهصورت خودکار اجرا شود، میتوانید آن را غیرفعال کنید:
sudo systemctl disable service_name
برای مثال:
sudo systemctl disable bluetooth
این دستور اجرای خودکار سرویس Bluetooth را غیرفعال میکند، اما لزوماً سرویس در حال اجرای آن را متوقف نمیکند.
اگر قصد دارید سرویس هم متوقف شود و هم اجرای خودکار آن غیرفعال شود:
sudo systemctl disable --now service_name
۸. بررسی فعال بودن خودکار سرویس
برای اینکه متوجه شوید یک سرویس هنگام بوت سیستم فعال خواهد شد یا خیر، از دستور زیر استفاده کنید:
systemctl is-enabled service_name
مثلاً:
systemctl is-enabled NetworkManager
اگر خروجی enabled باشد، سرویس برای اجرای خودکار تنظیم شده است.
اگر خروجی disabled باشد، اجرای خودکار آن فعال نیست.
۹. مشاهده سرویسهای فعال سیستم
برای مشاهده سرویسهایی که در حال حاضر فعال هستند:
systemctl list-units --type=service
برای مشاهده سرویسهای فعال و غیرفعال، میتوانید از دستور زیر استفاده کنید:
systemctl list-units --type=service --all
همچنین برای مشاهده سرویسهایی که با خطا مواجه شدهاند:
systemctl --failed
این دستور هنگام عیبیابی سیستم بسیار مفید است و فهرستی از واحدهای ناموفق را نمایش میدهد.
۱۰. بررسی گزارشها و خطاهای سرویسها
یکی از قابلیتهای مهم systemd، ثبت گزارشهای سیستم از طریق ابزار journalctl است.
برای مشاهده گزارشهای مربوط به یک سرویس:
journalctl -u service_name
مثلاً:
journalctl -u NetworkManager
برای مشاهده گزارشهای جدید بهصورت زنده:
journalctl -u NetworkManager -f
برای مشاهده گزارشهای مربوط به بوت فعلی سیستم:
journalctl -b
برای مشاهده فقط پیامهای خطای بوت فعلی:
journalctl -b -p err
و برای مشاهده گزارشهای ۵۰ خط آخر یک سرویس:
journalctl -u service_name -n 50
این دستورات در پیدا کردن علت اجرا نشدن سرویسها و بررسی مشکلات سیستم کاربرد زیادی دارند.
۱۱. آشنایی با چند سرویس کاربردی در Arch Linux
در این بخش چند سرویس پرکاربرد را بررسی میکنیم.
NetworkManager
NetworkManager وظیفه مدیریت اتصال شبکه، Wi-Fi و ارتباطات شبکهای را بر عهده دارد.
اگر این بسته را نصب کردهاید و قصد استفاده از آن را دارید:
sudo pacman -S networkmanager
sudo systemctl enable --now NetworkManager
برای بررسی وضعیت:
systemctl status NetworkManager
توجه داشته باشید که بهتر است همزمان چند مدیر شبکه را برای مدیریت یک اتصال فعال نکنید.
Bluetooth
برای استفاده از بلوتوث در Arch Linux، معمولاً به بستههای bluez و bluez-utils نیاز دارید.
ابتدا آنها را نصب کنید:
sudo pacman -S bluez bluez-utils
سپس سرویس Bluetooth را فعال کنید:
sudo systemctl enable --now bluetooth
برای بررسی وضعیت:
systemctl status bluetooth
SSH
سرویس SSH امکان اتصال و مدیریت سیستم از راه دور را فراهم میکند.
برای نصب OpenSSH:
sudo pacman -S openssh
برای فعالسازی و اجرای سرویس:
sudo systemctl enable --now sshd
برای بررسی وضعیت:
systemctl status sshd
نکته امنیتی: فعال کردن SSH به معنی در دسترس قرار گرفتن سرویس برای اتصال است. پیش از استفاده، تنظیمات احراز هویت، دسترسی کاربران و فایروال را بررسی کنید.
۱۲. تفاوت start، enable و enable --now
یکی از اشتباهات رایج کاربران تازهکار، یکسان دانستن این سه دستور است.
| دستور | عملکرد |
|---|---|
| start | اجرای سرویس در همین لحظه |
| enable | تنظیم اجرای خودکار سرویس هنگام بوت |
| enable --now | فعالسازی اجرای خودکار و اجرای فوری سرویس |
برای مثال:
sudo systemctl start bluetooth
بلوتوث را فقط در همین لحظه اجرا میکند.
sudo systemctl enable bluetooth
بلوتوث را برای اجرا در بوتهای بعدی تنظیم میکند.
sudo systemctl enable --now bluetooth
هم آن را فعال میکند و هم بلافاصله اجرا میکند.
۱۳. خطاهای رایج در systemd
خطای Unit not found
اگر با پیامی مشابه زیر مواجه شدید:
Failed to start example.service: Unit example.service not found.
احتمالاً سرویس موردنظر نصب نشده است یا نام واحد را اشتباه وارد کردهاید.
برای بررسی نام سرویس میتوانید از دستور زیر استفاده کنید:
systemctl list-unit-files --type=service
خطای Failed to start
اگر سرویس اجرا نشد، ابتدا وضعیت آن را بررسی کنید:
systemctl status service_name
سپس گزارشهای مربوط به آن را مشاهده کنید:
journalctl -u service_name -b
این گزارشها معمولاً اطلاعات مفیدی درباره علت خطا ارائه میدهند.
تغییر تنظیمات بدون اعمال شدن
اگر فایلهای مربوط به واحدهای systemd را بهصورت دستی تغییر دادهاید یا یک فایل سرویس جدید ایجاد کردهاید، ممکن است لازم باشد تنظیمات systemd دوباره بارگذاری شوند:
sudo systemctl daemon-reload
این دستور باعث میشود systemd فایلهای واحد را دوباره بررسی کند.
توجه داشته باشید که daemon-reload بهتنهایی سرویس را مجدداً راهاندازی نمیکند. اگر تغییرات نیازمند راهاندازی مجدد سرویس باشند، باید آن را جداگانه restart کنید.
۱۴. جمعبندی
systemd یکی از اجزای اصلی Arch Linux است و یادگیری آن برای مدیریت صحیح سیستم اهمیت زیادی دارد.
با استفاده از systemctl میتوانید سرویسها را اجرا یا متوقف کنید، اجرای خودکار آنها را مدیریت کنید و وضعیتشان را بررسی کنید. همچنین ابزار journalctl امکان مشاهده گزارشها و عیبیابی مشکلات را در اختیار شما قرار میدهد.
اگر قصد دارید کنترل بیشتری روی سیستم آرچ لینوکس خود داشته باشید، یادگیری دستورات این مقاله یکی از قدمهای مهم شما خواهد بود.
منابع و مطالعه بیشتر
---
تهیهشده برای جامعه ARCHIHA
ARCHIHA جامعهای مستقل برای یادگیری، گفتگو و بهاشتراکگذاری تجربههای دنیای لینوکس و فناوری است و وابستگی رسمی به پروژه Arch Linux ندارد.