FutureForgeFutureForge

خدمات FutureForge

  • طراحی و ساخت محصولاز شناخت نیاز تا انتشار محصول، یک مسیر روشن پیش رو دارید.
  • توسعه فول‌استکوب‌اپلیکیشن، API و داده را هماهنگ و یکپارچه توسعه دهید.
  • ممیزی مهندسیپیش از هزینه‌ی بیشتر، از وضعیت واقعی محصول‌تان باخبر شوید.
  • مشاوره معماریپیش از یک تصمیم فنی پرهزینه، گزینه‌ها را درست بسنجید.
  • زیرساخت و استقرارمحصول را با خیال راحت منتشر کنید و پایدار نگه دارید.
  • هوش مصنوعی در محصولهوش مصنوعی را فقط جایی به کار می‌گیریم که مسئله‌ای را حل کند.
نمونه‌کارهایادداشت‌هاقیمت‌گذاریدرباره ما
شروع گفتگو
  1. خانه
  2. /یادداشت‌ها
  3. /یادداشت‌ها
FutureForge

استودیوی مهندسی محصول — طراحی، ساخت و استقرار نرم‌افزار.

خدمات

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

راهنمای انتخاب

یادداشت‌هاقیمت‌گذاریتخمین هزینه پروژهمقایسه روش‌هانمونه‌کارهادرباره ماتماس

ارتباط

hello@futureforge.ir

ایده‌ای برای ساخت دارید؟

نیازتان را مطرح کنید تا درباره مسیر توسعه و قدم بعدی صحبت کنیم.

شروع گفتگو

© 2026 FutureForge. همه حقوق محفوظ است.

حریم خصوصیشرایط استفاده
خانهنمونه‌کارشروعتماس
عملیات و استقرار

systemctl: کنترل سرویس‌ها و واحدهای systemd

سا
سهیل ابراهیم‌پور
·۲۹ شهریور ۱۴۰۵·5 دقیقه مطالعه
systemctlsystemctl startenablestatusmaskdaemon-reloadsystemd
ترمینال systemctl status و استیکی enable

فرمان‌های ضروری systemctl برای مدیریت سرویس لینوکس: وضعیت، فعال‌سازی در بوت، ماسک، ویرایش drop-in و عیب‌یابی.

بیشتر کار روزمره با systemd از یک فرمان می‌گذرد: systemctl. به‌جای به‌خاطر سپردن مسیر اسکریپت init، نام unit را می‌گویید و وضعیت، شروع، توقف، فعال‌سازی در بوت یا ماسک را درخواست می‌کنید. اشتباه در تفاوت start و enable یکی از پرتکرارترین علت‌های «بعد از ریبوت سرویس نیست» است.

این مقاله جعبه ابزار عملی است؛ مفاهیم unit در مقالهٔ systemd آمده است.

ردیف افعال start stop restart enable disable status

پاسخ کوتاه

`systemctl status` برای دیدن وضعیت و چند خط آخر لاگ، `start`/`stop`/`restart` برای چرخهٔ عمر الان، `enable`/`disable` برای بودن یا نبودن در بوت، `mask` برای جلوگیری قطعی از شروع، و بعد از تغییر فایل unit حتماً `daemon-reload`. روی اوبونتو نام سرویس SSH اغلب `ssh.service` است نه `sshd.service` — همیشه با tab-complete یا list تأیید کنید.

start یعنی الان؛ enable یعنی بعد از بوت — دو کلید جدا، دو اشتباه جدا.

دیدن وضعیت

bash

systemctl status nginx.service systemctl is-active nginx systemctl is-enabled nginx systemctl is-failed nginx

خروجی status معمولاً Active state، Main PID، cgroup و چند خط journal را نشان می‌دهد. برای شکست‌ها:

bash

systemctl --failed systemctl list-units --type=service --state=failed

شروع، توقف، راه‌اندازی مجدد

bash

sudo systemctl start nginx sudo systemctl stop nginx sudo systemctl restart nginx sudo systemctl reload nginx

reload وقتی واحد ExecReload= دارد پیکربندی را بدون قطع کامل بارگذاری می‌کند؛ اگر پشتیبانی نشود خطا می‌گیرید و باید restart کنید. برای اپهایی که اتصال طولانی دارند، پیامد restart را با تیم هماهنگ کنید.

bash

sudo systemctl try-restart nginx sudo systemctl reload-or-restart nginx

enable در برابر start

فرماناثر الاناثر بعد از بوت
startسرویس را می‌آورد بالااگر enable نباشد ممکن است نیاید
stopالان متوقفاگر enable باشد بعداً برمی‌گردد
enableمعمولاً الان تغییر وضعیت اجرا نمی‌دهدsymlink برای خواسته‌شدن توسط target
disablesymlink بوت را برمی‌دارددیگر خودکار نمی‌آید
enable --nowهم enable هم startبله + الان

bash

sudo systemctl enable --now nginx sudo systemctl disable --now nginx

لیست و جستجو

bash

systemctl list-units --type=service systemctl list-unit-files --type=service | grep nginx systemctl list-timers --all

list-units آنچه بارگذاری/فعال است را نشان می‌دهد؛ list-unit-files وضعیت فایل‌ها (enabled/disabled/static/masked) را.

ماسک: جلوگیری قطعی

bash

sudo systemctl mask bluetooth.service sudo systemctl unmask bluetooth.service

mask واحد را به /dev/null پیوند می‌دهد تا حتی start دستی هم شکست بخورد — قوی‌تر از disable. برای سرویس‌هایی که بستهٔ دیگر ناخواسته استارت می‌کند مفید است؛ فراموش کردن unmask بعداً گیج‌کننده است.

ویرایش امن با drop-in

bash

sudo systemctl edit nginx.service

ادیتور یک فایل در /etc/systemd/system/nginx.service.d/override.conf باز می‌کند. بعد از ذخیره:

bash

sudo systemctl daemon-reload sudo systemctl restart nginx systemctl cat nginx.service

daemon-reload یعنی systemd فایل‌ها را دوباره بخواند؛ جایگزین restart خود سرویس نیست. cat واحد ادغام‌شده را نشان می‌دهد.

لاگ سریع از systemctl

bash

journalctl -u nginx.service -e journalctl -u nginx.service -f systemctl status nginx -l --no-pager

کاربر در برابر سیستم

بدون --user روی واحدهای سیستم (معمولاً root) کار می‌کنید. برای سرویس‌های نشست کاربر:

bash

systemctl --user status systemctl --user enable --now myapp.service

مسیر فایل‌ها و journal جداست؛ روی سرور headless بیشتر با واحدهای سیستم سروکار دارید.

عیب‌یابی بوت و وابستگی

bash

systemctl list-dependencies ssh.service systemctl show nginx -p ActiveState -p SubState -p MainPID -p FragmentPath systemctl critical-chain

critical-chain کمک می‌کند ببینید چه چیزی بوت را طولانی کرده؛ برای بهینه‌سازی شروع مفید است نه برای هر حادثهٔ روزانه.

الگوی عملی استقرار یک سرویس

  1. فایل unit را در /etc/systemd/system/myapp.service بگذارید.
  2. daemon-reload
  3. start و status را چک کنید؛ journal را بخوانید.
  4. اگر سالم بود enable --now
  5. ریبوت آزمایشی یا حداقل stop/start مجدد قبل از ترک سرور.

bash

sudo install -m 644 myapp.service /etc/systemd/system/myapp.service sudo systemctl daemon-reload sudo systemctl enable --now myapp systemctl status myapp --no-pager

اشتباه‌های رایج

  • فراموش daemon-reload بعد از ویرایش unit.
  • اشتباه گرفتن نام ssh و sshd بین توزیع‌ها.
  • restart مکرر به‌جای خواندن لاگ علت کرش.
  • disable کردن سرویس حیاتی از راه دور بدون console.
  • ویرایش فایل vendor و از دست رفتن تغییر در ارتقای بسته.

خلاصه

systemctl زبان مشترک کنترل سرویس است: وضعیت را ببینید، start/stop را از enable جدا کنید، با edit و daemon-reload سفارشی‌سازی کنید، و برای مسدودسازی قطعی mask را بشناسید. قدم بعدی مسلط شدن به journalctl برای دیدن «چرا» پشت هر failed است.

سوالات متداول

چرا enable کردم ولی بعد از بوت نیست؟

ممکن است واحد failed شده، وابستگی شبکه نبوده، یا mask/conflict داشته. status و journal بعد از بوت را ببینید؛ is-enabled فقط symlink را می‌گوید نه موفقیت اجرا را.

فرق restart و try-restart؟

try-restart فقط اگر فعال باشد راه می‌اندازد مجدد؛ اگر خوابیده باشد بیدارش نمی‌کند.

منابع و مراجع

  • systemctl(1): https://www.freedesktop.org/software/systemd/man/latest/systemctl.html
  • systemd.service(5): https://www.freedesktop.org/software/systemd/man/latest/systemd.service.html
  • systemd.unit(5): https://www.freedesktop.org/software/systemd/man/latest/systemd.unit.html

نویسنده

سا

سهیل ابراهیم‌پور بنیان‌گذار FutureForge است. روی طراحی محصول، معماری و استقرار نرم‌افزار سفارشی کار می‌کند.

یادداشت‌های مرتبط

یادداشت‌های مرتبط

دسته‌بندی‌ها

خدمات مرتبط

از یادداشت تا پروژه

اگر با مسئله‌ای شبیه این روبه‌رو هستید، درباره‌ی شرایط پروژه‌تان با هم صحبت کنیم.

برای انتخاب مسیر فنی پروژه‌تان کمک می‌خواهید؟

از مسئله و محدودیت‌هایتان بگویید؛ اگر بتوانیم همراهی‌تان کنیم، برای گفت‌وگو هماهنگ می‌کنیم.

سهیل ابراهیم‌پور
یادداشت‌ها
امنیت n8n: اعتبارنامه، وب‌هوک و SSRF
نصب n8n روی سرور با Docker Compose
n8n چیست و چگونه کار می‌کند؟
امنیت فروشگاه اینترنتی: سایت، درگاه و فرایند عملیاتی
بازیابی سرور لینوکس بعد از خرابی دیسک یا استقرار اشتباه

عملیات و استقرار

امنیت n8n: اعتبارنامه، وب‌هوک و SSRF

۹ آبان ۱۴۰۵

عملیات و استقرار

نصب n8n روی سرور با Docker Compose

۸ آبان ۱۴۰۵

عملیات و استقرار

n8n چیست و چگونه کار می‌کند؟

۸ آبان ۱۴۰۵

عملیات و استقرار

امنیت فروشگاه اینترنتی: سایت، درگاه و فرایند عملیاتی

۶ آبان ۱۴۰۵

عملیات و استقرار

بازیابی سرور لینوکس بعد از خرابی دیسک یا استقرار اشتباه

۲ آبان ۱۴۰۵
همه یادداشت‌ها315
معماری نرم‌افزار31
واژه‌نامه37
عملیات و استقرار94
مهندسی محصول122
راهنمای وب31
طراحی و ساخت محصول
توسعه فول‌استک
ممیزی مهندسی
مشاوره معماری
زیرساخت و استقرار
شروع گفتگو
ابزارهای رایگان
شروع گفتگو