رفع خطای systemctl: Command Not Found در اوبونتو

سرور مجازی
رفع خطای  systemctl: Command Not Found در اوبونتو
تاریخ انتشار: 2 هفته پیش تعداد بازدید: 29 دسته بندی: لینوکس

یکی از ابزارهای قدرتمند و مفید برای کاربران لینوکس، به ویژه توزیع‌های مدرن مانند اوبونتو، دستور systemctl است. این ابزار خط فرمان معمولا برای تعامل با systemd، system و service manager استفاده می‌شود. از طریق دستور، می‌توانید سرویس‌های سیستم را مدیریت و وضعیت آنها را مشاهده کنید، آنها را Start یا Stop نموده و در هنگام بوت سیستم آنها را enable و disable کنید. اما اگر دستور systemctl پیدا یا شناسایی نشود، با خطای sudo:systemctl: command not found مواجه خواهید شد.
 


Systemctl: Command Not Found به چه معناست؟

به بیان ساده، خطای systemctl: command not found به این معنی است که ابزار خط فرمان systemctl در محیط فعلی در دسترس یا قابل دسترسی نیست. این می‌تواند به دلایل متعددی باشد که همگی به این باز می‌گردند که محیط یک محیط غیر سیستمی (non-system) شده یا بسته systemd روی سیستم نصب نشده است.
معمولا بسته systemd نصب نشده است یا توزیع و نسخه لینوکس شما از systemd استفاده نمی‌کند. بلکه از سیستم‌های service management قدیمی مانند init.d استفاده می‌کند. یک احتمال دیگر این است که متغیر محیطی PATH دایرکتوری را که systemctl در آن قرار دارد را شامل نمی‌شود، به این معنی که shell  شما نمی‌تواند آن را پیدا کند.
اکنون که می‌دانید چه مشکلی در سیستم وجود دارد که منجر به خطای systemctl: command not found می‌شود، بیایید ببینیم چگونه می‌توان بررسی کرد که مشکل شما کجاست و چگونه آن را برطرف نمود.

رفع خطای systemctl: Command Not Found Error

بررسی کنیم که آیا در سیستم systemd نصب شده است و از systemctl استفاده می‌کند یا خیر، و همچنین مسیر systemctl را بررسی می‌کنیم. هنگامی که مشکل را تایید کردیم، اقدامات لازم را برای رفع خطا انجام خواهیم داد.

  1. بررسی اینکه آیا سیستم از systemd استفاده می کند

از آنجایی که اوبونتو systemctl تنها در صورتی قابل استفاده است که بسته systemd را نصب کرده باشید، ابتدا می‌خواهیم با اجرای دستور زیر بررسی کنیم که آیا سیستم شما قرار است از systemd استفاده کند یا خیر:


ps -p 1 -o comm=

یا می‌توانید نسخه systemd را با دستور زیر بررسی کنید:


systemd --version

اگر خروجی systemd است، پس systemd سیستم init شماست و باید اوبونتو سیستم systemctl را نصب کرده باشد. با این حال، اگر خروجی init یا process manager دیگری باشد، به این معنی است که سیستم شما از یک سیستم اولیه سازی (initialization) جایگزین استفاده نموده و systemctl کار نخواهد کرد مگر اینکه به systemd مهاجرت کنید.

اگر سیستم‌های اولیه‌سازی قدیمی‌تری مانند Upstart یا SysVinit را می‌بینید و می‌خواهید برای استفاده از systemctl به systemd بروید، این مراحل را دنبال کنید:

  • systemctl را با نصب systemd با استفاده از دستور زیر نصب کنید:

sudo apt install systemd-sysv

  • با اجرای این دستور، سیستم خود را ریبوت کنید:

sudo reboot

  • بررسی کنید که سیستم شما اکنون از systemd استفاده می کند:


ps -p 1 -o comm=

اکنون خروجی باید systemd  باشد.

 

  1. اطمینان از اینکه systemd به درستی نصب شده است

در شرایط عادی، زمانی که systemd نصب شده و به عنوان سیستم اولیه شما در حال اجرا است، دستور systemctl باید به درستی کار کند. اگر اینطور نیست، به این معنی است که بسته systemd یا گم شده است یا به درستی نصب نشده است.

توجه داشته باشید که اگر از نسخه مینیمال اوبونتو، مانند کانتینر Docker یا instance ابری استفاده می‌کنید، ممکن است systemd به طور پیش فرض نصب نشده باشد. برای نصب systemctl از طریق نصب systemd، دستورات زیر را اجرا کنید:


sudo apt update
sudo apt install systemd

پس از نصب، بررسی کنید که آیا دستور systemctl در دسترس است یا خیر.

  1. بررسی PATH  مربوط به systemctl

یکی از مشکلات رایج در مورد خطای systemctl not found این است که systemctl می تواند نصب شود، اما در PATH سیستم شما نیست. برای بررسی اینکه آیا باینری‌های systemd در typical directories مانند bin/، /usr/bin یا usr/local/bin/ وجود دارد یا خیر، می توانید از دستور زیر استفاده کنید:


which systemctl

اگر systemctl در هر یک از دایرکتوری‌های فهرست شده در PATH یافت می شود، باید خروجی مانند زیر دریافت کنید:


/usr/bin/systemctl

اگر systemctl در هیچ یک از دایرکتوری‌های موجود در PATH یافت نشود، دستور which  چیزی را بر نمی‌گرداند.

با این حال، systemctl ممکن است هنوز کار نکند، حتی اگر در دایرکتوری‌های شما یافت شود. این به این دلیل است که systemctl می تواند در دایرکتوری قرار گیرد که در PATH گنجانده نشده است. در این شرایط، باید با استفاده از دستور زیر بررسی کنید که آیا دایرکتوری که systemctl در آن قرار دارد بخشی از سیستم شما است:


echo $PATH


خروجی باید چیزی شبیه این باشد:


/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

اکنون، تنها کاری که باید انجام دهید این است که بررسی کنید آیا دایرکتوری که systemctl در آن قرار دارد (که از دستور which  دریافت کرده اید) در دایرکتوری‌های فهرست شده در خروجی دستور echo $PATH قرار دارد یا خیر.

اگر دایرکتوری systemctl در خروجی echo $PATH گنجانده نشده است، باید آن را به متغیر PATH خود اضافه کنید. برای این کار باید دستور زیر را اجرا کنید:
برای کاربران پوسته Bash، فایل bashrc~/. را در یک ویرایشگر متن باز کنید:


nano ~/.bashrc

خط زیر را در انتهای فایل اضافه کنید:


export PATH=$PATH:/usr/bin


usr/bin/ یک دایرکتوری معمولی است که systemctl در این مثال قرار دارد.

اکنون فایل را ذخیره کرده و با فشار دادن CTRL + X، سپس Y را برای تایید و Enter را برای ذخیره فشار دهید.

برای کاربران Zsh، فایل zshrc~/. را در یک ویرایشگر متن باز کنید:


nano ~/.zshrc

خط زیر را در انتهای فایل اضافه کنید:


export PATH=$PATH:/usr/bin

usr/bin یک دایرکتوری معمولی است که systemctl در این مثال قرار دارد.

اکنون فایل را ذخیره کرده و با فشار دادن CTRL + X، سپس Y را برای تایید و Enter را برای ذخیره فشار دهید.

پس از انجام مراحل بالا، از دستور echo $PATH برای بررسی اینکه آیا دایرکتوری systemctl شما به PATH شما اضافه شده است استفاده کنید. اکنون، باید بتوانید systemctl را بدون اجرای خطای “systemctl: command not found” اجرا کنید.

سرور مجازی لینوکس یک ماشین مجازی کامل است که می‌توانید توزیع مورد علاقه خود را انتخاب و نصب نمائید.
خرید سرور مجازی در پنج موقعیت جغرافیایی ایران، ترکیه، هلند، آلمان و آمریکا با قابلیت تحویل آنی در پارسدو فراهم است.
  1. نصب مجدد systemd

اگر رفع‌های قبلی کار نمی‌کنند و همچنان با خطای دستور not found مواجه هستید، نصب مجدد systemd به طور کامل ممکن است مشکل را حل کند. برای این کار دستورات زیر را اجرا کنید:


sudo apt purge systemd
sudo apt install systemd


سپس با این دستور سیستم خود را ریبوت کنید:


sudo reboot


بررسی کنید که آیا systemctl کار می کند یا خیر.

  1. تایید اینکه systemd به درستی پیکربندی شده است

گاهی اوقات، این مشکل می تواند به سادگی نصب اشتباه systemd باشد که منجر به خطای systemctl: command not found می‌شود. تنها کاری که برای رفع این مشکل باید انجام دهید این است که دستور زیر را اجرا کنید و کارتان تمام شد:


sudo dpkg-reconfigure systemd

  1. زیرسیستم ویندوز قدیمی برای لینوکس (WSL)

اگر از اوبونتو تحت WSL (زیر سیستم ویندوز برای لینوکس) استفاده می کنید، باید بدانید که نسخه‌های قدیمی WSL، مانند WSL 1، به طور بومی از systemctl پشتیبانی نمی‌کنند، بنابراین مهم نیست که از کدام یک از اصلاحات قبلی استفاده می کنید، نمی تواند systemctl را اجرا کند.
اگر می خواهید از توابع systemctl استفاده کنید، باید به WSL 2 ارتقا دهید که از systemd پشتیبانی بهتری دارد. اگر مطمئن نیستید که از WSL استفاده می کنید یا نه، می توانید با استفاده از دستور زیر بررسی کنید:


uname -a

 

اگر خروجی از WSL نام می‌برد، به همین دلیل است که خطای «systemctl: command not found» را می‌بینید.

  1. استفاده از sudo Service به عنوان جایگزینی برای systemctl

اگر به دلیل اینکه سیستم شما از systemd استفاده نمی‌کند با خطای systemctl: command not found مواجه هستید، می توانید از دستور sudo service برای مدیریت سرویس ها استفاده کنید. این دستور با سیستم های init قدیمی مانند SysVinit یا Upstart کار می کند. این برای سیستم های اوبونتو که به جای systemd به اسکریپت های init متکی هستند مفید است.

به عنوان مثال، برای راه اندازی یک سرویس، باید اجرا کنید:


sudo service start

جمع‌بندی

systemd و ابزار خط فرمان systemctl آن جایگزین اکثر سیستم‎های قدیمی init مانند SysVinit و Upstart شده است. در حالی که systemd ممکن است به دلیل طراحی یکپارچه و فلسفه غیر یونیکس، فنجان چای سیستم اولیه برای همه نباشد، systemd هنوز به طور کلی به عنوان انتخاب رایج در نظر گرفته می شود. بنابراین، امیدواریم که توانسته باشید خطای دستور not available systemctl خود را حل کنید، زیرا عدم امکان استفاده از ابزار خط فرمان systemd به شدت قابلیت های آن را محدود می کند.
 


اشتراک گذاری مقاله :

نظرتون برامون مهمه شما اولین نظر رو بنویسید