در توزیع های لینوکسی که از systemd به عنوان init system استفاده می كنند (مانند RHEL/CentOS 7 و یا Ubuntu 15.10 به بعد و بسیاری دیگر). برای متوقف نمودن یک سرویس کافی است unit مربوط به آن سرویس را “stop” کنیم. به این صورت:
# systemctl stop httpd.service
اما اگر قصد داریم در بوت بعدی سیستم عامل این سرویس استارت نشود باید آن را به این ترتیب “disable” کنیم:
# systemctl disable httpd.service
اما شاید شنيده باشید که در systemd موضوعی وجود دارد به نام Unit Dependencies. به طور مثال می توانيد برای httpd.service لیست Dependencyها را ببینید:
# systemctl list-dependencies httpd.service httpd.service ● ├─-.mount ● ├─system.slice ● ├─tmp.mount ● ├─var.mount ● └─basic.target ● └─-.mount ● ├─alsa-restore.service
حال اگر شما یکی از این unitها را که httpd در حالت اجرا به آن نیاز دارد را disable کنید عملا systemd متوجه نیاز httpd به آن خواهد شد و بدون توجه به تصمیم شما برای disable و یا stop بودن unit آن را استارت می کند. در برخی موارد که ما از سرویس هايي با نقش هاي مشابه (مانند firewalldو iptables) استفاده میکنیم و قصد سوییج بین آن ها را داریم این موضوع ما را دچار سردرگمی می کند. برای جلوگیری از بروز این مشکل بهترین پیشنهاد این است که unit مورد نظر را mask نمایید:
# systemctl mask httpd.service Created symlink from /etc/systemd/system/httpd.service to /dev/null.
همانطور که از خروجی دستور فوق هم مشخص است عمل mask شبیه به ساخت یک لینک به /dev/null کار میکند. حال اگر نسبت به استارت سرویس اقدام کنید با این پیام مواجه می شوید:
# systemctl start httpd.service Failed to start httpd.service: Unit httpd.service is masked
اگر قصد داشتید یک سرویس را از حالت mask خارج کنید از دستور زیر استفاده نمایید:
# systemctl unmask httpd.service