مدیریت سرویسها توسط systemctl
در این مطلب قصد داریم دستورات systemctl را آموزش بدهیم که ابزار اصلی برای کنترل سرویسها و init است. در ادامه نگاهی میاندازیم که چگونه سرویسها را مدیریت کنیم و در نهایت وضعیتشان را بررسی کنیم.
شروع و متوقف کردن سرویسها
برای شروع کردن یک سرویس systemd باید از دستور start
استفاده کنیم.
اگر شما یک کاربر غیر ریشه هستید لطفا روت شوید و یا قبل از دستور sudo
بگذارید تا دستور با دسترسی ریشه اجرا شود در غیر این صورت ممکن که دستور شما عمل نکند.
systemctl start APPLICATION.service
توسط این دستور شما میتوانید سرویس خود را شروع کنید.
برای مثال توسط این دستور میتوانید وب سرور nginx را فعال نمایید (لازم به ذکر است که اگر شما نام سرویسی را که میخواهید استفاده کنید را نمیدانید، میتوانید با نوشتن فقط یکی دو حرف اول آن سرویس و سپس زدن دو بار پشت سر هم کلید TAB
نام آن را کامل کنید.).
systemctl start nginx.service
systemd برای کنترل کردن یک سرویس، به دنبال *.service
(همانطور که میدانید ستاره یک wild card
و به معنی هر چیزی است) میگردد، بنابر این شما میتوانید برای راحتی کار به این صورت سرویسهای خود را مدیریت کنید.
systemctl start nginx
درصورتی که میخواهید سرویسی را که شروع کردهاید، متوقف کنید میتوانید به همین شیوه عمل کنید با این تفاوت که به جای start
از stop
استفاده کنید.
systemctl stop APPLICATION.service
بارگذاری و راه اندازی مجدد سرویسها
در صورتی که سرویسی را شروع کردید و اکنون میخواهید آن را دوباره راهاندازی کنید باید از restart
استفاده کنید.
systemctl restart APPLICATION.service
و یا اگر میخواهید فقط آن را به صورت مجدد بارگذاری نمایید میتوانید از reload
استفاده کنید.
systemctl reload APPLICATION.service
نکته: تفاوت reload
و restart
در این است که reload
فقط فایل کانفیگ ویرایش شده را میخواند (و سرویس را مجدد راهاندازی نمیکند) که عموما بسیار سریع انجام میشود. اما اگر میخواهید بهطور کلی یک سرویس را دوباره راهاندازی کنید باید از restart
استفاده کنید که عموما زمان بیشتری نسبت به بارگذاری طول میکشد. اگر مطمئن نیستید که میخواهید از کدام استفاده کنید بهتر است که از reload-or-restart
استفاده کنید که ابتدا فایل کانفیگ ویرایش شده را مجدد بارگذاری میکند و در صورت نیاز سرویس مربوطه را مجدد راه اندازی میکند.
systemctl reload-or-restart APPLICATION.service
فعال و غیر فعال کردن سرویسها
در صورتی که سرویس مورد نظر خود را توسط start
شروع کرده باشید، با اولین ریبوت همه آنها به تنظیمات خود بازمیگردد و ممکن است اصلا بعد از بارگذاری سیستم اجرا نشوند. در صورتی که میخواهید systemd سرویس مورد نظر شما را هنگام بوت به صورت خودکار فعال کند باید از enable استفاده کنید. به این صورت.
# systemctl enable APPLICATION.service
این کار یک لینک از /etc/systemd/system
(و در بعضی سیستم ها /lib/systemd/system
) ایجاد میکند در مسیری که systemd در آن به دنیال فایل هایی میگردد که باید هنگام بوت آنها را شروع کند. (معمولا در /etc/systemd/system/some-target.target.wants_
)
اگر میخواهید عکس این کار را انجام دهید، یعنی وقتی سیستم بوت شد آن سرویس به طور پیشفرض اجرا نشود باید از disable
استفاده کنید، به این صورت
systemctl disable APPLICATION.service
برای مثال درصورتی که میخواهید جلوی اجرا شدن خودکار وب سرور nginx را هنگام بوت بگیرید باید به این صورت عمل کنید.
systemctl disable nginx.service
وضعیت یک سرویس
در صورتی که میخواهید وضعیت یک سرویس را بررسی کنید (برای مثال مطمئن شوید که سرویس شروع و یا متوقف شده است و یا چند خط اول لاگ را بررسی کنید) میتوانید از status
استفاده نمایید.
systemctl status APPLICATION.service
اگر میخواهید مطمئن شوید سرویسی که میخواهید شروع یا متوقف شده است (برای مثال در اسکریپت نویسی) میتوانید از is-active
استفاده کنید.
systemctl is-active APPLICATION.service
خروجی این دستور در صورتی که سرویس مورد نظر شما شروع شده باشد active
خواهد بود و در غیر این صورت inactive
.
و به همین ترتیب، اگر میخواهید مطمئن شوید که سرویس شما فعال است یا غیر فعال (الان شما دیگه میدونید که فرق غیر فعال با متوقف چیه 🙂 ) میتوانید از is-enabled
استفاده کنید.
systemctl is-enabled APPLICATION.service
خروجی این دستور هم در صورت فعال بودن enable
و در صورت غیر فعال بودن disable
خواهد بود.