systemctl ابزار اصلی کنترل واحدهای systemd در اوبونتو است: سرویس را اکنون start/stop میکند، با enable/disable وضعیت بوت را عوض میکند و با status نمای وضعیت و تکهای از لاگ را نشان میدهد. این آموزش مسیر مبتدی را طبق مانپیج systemctl(1) با چند فرمان روزمره جمع میکند.
پیشنیازها
- اوبونتو با systemd (نصب پیشفرض).
- برای واحدهای سیستمی معمولاً sudo لازم است.
- نام واحد را وقتی مبهم است با پسوند .service صریح کنید.
دیدن وضعیت و کنترل زمان اجرا
- وضعیت یک سرویس را ببینید:
systemctl status ssh
- برای تغییر وضعیت زمان اجرا (معمولاً با sudo):
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
- اگر واحد از reload پیکربندی پشتیبانی کند، reload کمتر از restart قطعی است؛ وگرنه restart مسیر امنتری برای اعمال تغییر است.
enable در برابر start
enable فقط symlink بوت میسازد و لزوماً سرویس را همین حالا بالا نمیآورد. start بدون enable پس از ریبوت سرویس را برنمیگرداند.
- ترکیب رایج برای بوت و اجرای اکنون:
sudo systemctl enable --now nginx
- برای خاموش ماندن پس از بوت از disable استفاده کنید.
- وضعیت را با is-enabled و is-active برای اسکریپت بررسی کنید.
وقتی status مقدار failed میدهد، جزئیات را با journalctl بگیرید:
journalctl -u nginx -e
پس از ویرایش فایل واحد یا drop-in در /etc/systemd/system، ترتیب درست این است: ویرایش، سپس daemon-reload، سپس restart. فراموش کردن daemon-reload باعث میشود restart هنوز تعریف قدیمی را بخواند.
نکته: واحدهای کاربر با systemctl --user فضای جدا دارند و با واحدهای سیستمی قاطی نمیشوند. در سرور بدون نشست کاربر، معمولاً همان واحدهای سیستمی مدنظر است.
چکلیست مبتدی
- نام واحد را با پسوند .service وقتی مبهم است صریح کنید.
- enable را با start اشتباه نگیرید؛ در نیاز از --now استفاده کنید.
- شکست را قبل از restartهای پیاپی با journalctl بخوانید.
- mask فقط وقتی مسدودسازی سخت عمدی است؛ وگرنه disable و رفع ریشه خواناتر است.
- واحدهای سیستمی معمولاً sudo میخواهند.
- با list-units --state=failed سرویسهای شکستخورده را سریع ببینید.
برای سرویس بعدی معمولاً از status شروع میکنید یا مستقیم enable --now؟