Một trong những công cụ mạnh mẽ và tiện dụng nhất dành cho người dùng Linux, đặc biệt là các bản phân phối hiện đại như Ubuntu, là lệnh systemctl. Tiện ích dòng lệnh này thường được sử dụng để tương tác với systemd, hệ thống và trình quản lý dịch vụ.
Thông qua lệnh, bạn có thể quản lý các dịch vụ hệ thống, xem trạng thái của chúng, khởi động hoặc dừng chúng cũng như bật và tắt chúng khi khởi động hệ thống. Khá tiện dụng phải không? Nhưng nếu lệnh systemctl không được tìm thấy hoặc nhận dạng, bạn sẽ phải đối mặt với lỗi “sudo:systemctl: không tìm thấy lệnh” lỗi.
Vì vậy, hãy nói về ý nghĩa của lỗi “systemctl: command not Found”, các lý do khác nhau khiến bạn gặp phải lỗi này và cách khắc phục lỗi này.
systemctl: Lệnh không tìm thấy có nghĩa là gì?
Nói một cách đơn giản, lỗi “systemctl: command not Found” có nghĩa là tiện ích dòng lệnh systemctl không khả dụng hoặc không thể truy cập được trong môi trường hiện tại. Điều này có thể do nhiều lý do, tất cả đều bắt nguồn từ môi trường không phải là môi trường hệ thống hoặc gói systemd không được cài đặt trên hệ thống.
Về cơ bản, gói systemd chưa được cài đặt hoặc bản phân phối hoặc phiên bản Linux của bạn không sử dụng systemd; đúng hơn, nó sử dụng các hệ thống quản lý dịch vụ cũ hơn như init.d. Một khả năng khác là biến môi trường PATH không bao gồm thư mục chứa systemctl, nghĩa là shell của bạn không thể tìm thấy nó.
Bây giờ bạn đã biết điều gì có thể xảy ra với hệ thống của mình, dẫn đến lỗi “systemctl: command not Found”, hãy xem cách bạn có thể xác minh vấn đề của mình nằm ở đâu và cách khắc phục.
Sửa lỗi systemctl: Lỗi không tìm thấy lệnh
Trong các bước sau, chúng tôi sẽ xác minh xem hệ thống của bạn đã cài đặt systemd và sử dụng systemctl hay chưa, cũng như kiểm tra đường dẫn của systemctl. Sau khi xác minh được sự cố, chúng tôi sẽ thực hiện các bước cần thiết để khắc phục lỗi.
1. Xác minh xem hệ thống của bạn có sử dụng systemd không
Vì Ubuntu systemctl chỉ có thể được sử dụng nếu bạn đã cài đặt gói systemd nên trước tiên chúng tôi sẽ kiểm tra xem hệ thống của bạn có được sử dụng systemd hay không bằng cách chạy lệnh sau:
ps -p 1 -o comm=
Hoặc bạn có thể kiểm tra phiên bản systemd bằng lệnh sau:
systemd --version
Nếu đầu ra là systemd thì systemd là hệ thống init của bạn và cần cài đặt Ubuntu systemctl. Tuy nhiên, nếu đầu ra là init hoặc trình quản lý quy trình khác, điều đó có nghĩa là hệ thống của bạn đang sử dụng hệ thống khởi tạo thay thế và systemctl sẽ không hoạt động trừ khi bạn di chuyển sang systemd.
Nếu bạn thấy các hệ thống khởi tạo cũ hơn như Upstart hoặc SysVinit và muốn chuyển sang systemd để sử dụng systemctl, hãy làm theo các bước sau:
1. Cài đặt systemctl bằng cách cài đặt systemd bằng lệnh sau:
sudo apt install systemd-sysv
2. Khởi động lại hệ thống của bạn bằng cách chạy lệnh này:
sudo reboot
3. Kiểm tra xem hệ thống của bạn hiện có đang sử dụng systemd không:
ps -p 1 -o comm=
Đầu ra phải là systemd ngay bây giờ.
2. Đảm bảo systemd được cài đặt chính xác
Trong trường hợp bình thường, khi systemd được cài đặt và đang chạy dưới dạng hệ thống init của bạn, lệnh systemctl sẽ hoạt động chính xác. Nếu không, điều đó có nghĩa là gói systemd bị thiếu hoặc được cài đặt không đúng cách.
Lưu ý rằng nếu bạn đang sử dụng phiên bản tối thiểu của Ubuntu, chẳng hạn như bộ chứa Docker hoặc phiên bản đám mây, thì systemd có thể chưa được cài đặt theo mặc định. Để cài đặt systemctl thông qua cài đặt systemd, hãy chạy các lệnh sau:
sudo apt update sudo apt install systemd
Sau khi cài đặt, hãy kiểm tra xem lệnh systemctl có sẵn không.
3. Kiểm tra PATH của systemctl
Một vấn đề phổ biến với lỗi không tìm thấy systemctl là systemctl có thể được cài đặt nhưng nó không có trong PATH của hệ thống của bạn. Để kiểm tra xem các tệp nhị phân systemd có tồn tại trong các thư mục thông thường nơi nó nằm hay không, như /bin, /usr/bin hoặc /usr/local/bin, bạn có thể sử dụng lệnh sau:
which systemctl
Nếu tìm thấy systemctl trong bất kỳ thư mục nào được liệt kê trong PATH, bạn sẽ nhận được kết quả như thế này:
/usr/bin/systemctl
Nếu không tìm thấy systemctl trong bất kỳ thư mục nào trong PATH, lệnh which sẽ không trả về gì.
Tuy nhiên, systemctl có thể vẫn không hoạt động ngay cả khi nó được tìm thấy trong thư mục của bạn. Điều này là do systemctl có thể nằm trong một thư mục không có trong PATH. Trong tình huống này, bạn sẽ phải xác minh xem thư mục chứa systemctl có phải là một phần của hệ thống của bạn hay không bằng cách sử dụng lệnh sau:
echo $PATH
Đầu ra phải giống như thế này:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Bây giờ, tất cả những gì bạn phải làm là kiểm tra xem thư mục chứa systemctl (mà bạn nhận được từ lệnh which) có được bao gồm trong các thư mục được liệt kê trong đầu ra từ lệnh echo $PATH hay không.
Nếu thư mục của systemctl không có trong đầu ra của echo $PATH, bạn sẽ phải thêm nó vào biến PATH của mình. Để làm điều này, bạn sẽ phải chạy lệnh sau:
Vì Người dùng shell Bash, hãy mở tệp ~/.bashrc trong trình soạn thảo văn bản:
nano ~/.bashrc
Thêm dòng sau vào cuối tập tin:
export PATH=$PATH:/usr/bin
/usr/bin là một thư mục điển hình chứa systemctl trong ví dụ này.
Bây giờ, hãy lưu và đóng tệp bằng cách nhấn CTRL + X, sau đó nhấn Y để xác nhận và Enter để lưu.
Vì Người dùng Zsh, Mở tệp ~/.zshrc trong trình soạn thảo văn bản:
nano ~/.zshrc
Thêm dòng sau vào cuối tập tin:
export PATH=$PATH:/usr/bin
/usr/bin là một thư mục điển hình chứa systemctl trong ví dụ này.
Bây giờ, hãy lưu và đóng tệp bằng cách nhấn CTRL + X, sau đó nhấn Y để xác nhận và Enter để lưu.
Khi bạn đã hoàn tất các bước trên, hãy sử dụng lệnh echo $PATH để xác minh xem thư mục systemctl của bạn đã được thêm vào PATH chưa. Bây giờ, bạn sẽ có thể chạy systemctl mà không gặp phải lỗi “systemctl: command not Found”.
4. Cài đặt lại hệ thống
Nếu các bản sửa lỗi trước đó không hoạt động và bạn vẫn gặp phải lỗi không tìm thấy lệnh, việc cài đặt lại hoàn toàn systemd có thể giải quyết được sự cố. Để thực hiện việc này, hãy chạy các lệnh sau:
sudo apt purge systemd sudo apt install systemd
Sau đó, khởi động lại hệ thống của bạn bằng lệnh này:
sudo reboot
Kiểm tra xem systemctl có hoạt động không.
5. Xác minh systemd được cấu hình đúng
Đôi khi, sự cố có thể đơn giản như cài đặt systemd bị định cấu hình sai, dẫn đến lỗi “systemctl: không tìm thấy lệnh”. Tất cả những gì bạn phải làm để khắc phục sự cố này là chạy lệnh sau và bạn đã hoàn tất:
sudo dpkg-reconfigure systemd
6. Hệ thống con Windows dành cho Linux (WSL) đã lỗi thời
Nếu bạn đang sử dụng Ubuntu trong WSL (Hệ thống con Windows cho Linux) bạn nên biết rằng các phiên bản cũ hơn của WSL, chẳng hạn như WSL 1, không hỗ trợ systemctl, do đó, cho dù bạn sử dụng bản sửa lỗi nào trước đó, bạn sẽ không thể chạy systemctl.
Nếu bạn muốn tận dụng các chức năng của systemctl, bạn sẽ phải nâng cấp lên WSL 2, phiên bản này hỗ trợ tốt hơn cho systemd. Nếu bạn không chắc chắn liệu mình có đang sử dụng WSL hay không, bạn có thể kiểm tra bằng cách sử dụng lệnh sau:
uname -a
Nếu đầu ra đề cập đến WSL thì đó là lý do tại sao bạn thấy lỗi “systemctl: command not Found”.
7. Sử dụng dịch vụ sudo thay thế cho systemctl
Nếu bạn đang gặp phải lỗi “systemctl: command not Found” do hệ thống của bạn không sử dụng systemd, bạn có thể sử dụng lệnh dịch vụ sudo để quản lý dịch vụ. Lệnh này hoạt động với các hệ thống init cũ hơn như SysVinit hoặc Upstart. Điều này hữu ích cho các hệ thống Ubuntu dựa vào tập lệnh init thay vì systemd.
Ví dụ: để bắt đầu một dịch vụ, bạn sẽ chạy:
sudo service <service_name> start
suy nghĩ cuối cùng
systemd và tiện ích dòng lệnh systemctl của nó đã thay thế hầu hết các hệ thống init cũ khác như SysVinit và Upstart. Mặc dù systemd có thể không phải là sở thích của mọi người về hệ thống init do thiết kế nguyên khối và triết lý không phải Unix, nhưng systemd thường vẫn được coi là lựa chọn phổ biến. Vì vậy, hy vọng rằng bạn có thể giải quyết lỗi không có lệnh systemctl của mình, vì việc không thể sử dụng tiện ích dòng lệnh của systemd sẽ hạn chế nghiêm trọng khả năng của nó.
Câu hỏi thường gặp
Systemctl là gì và systemctl: Lệnh không tìm thấy nghĩa là gì?
systemctl là một công cụ dòng lệnh được sử dụng để quản lý các dịch vụ trong hệ thống Linux chạy systemd, chẳng hạn như Ubuntu. Lỗi “systemctl: command not Found” xảy ra khi công cụ này không khả dụng hoặc không thể truy cập được, thường là do hệ thống không sử dụng systemd hoặc gói systemd chưa được cài đặt.
Systemctl có sẵn trên tất cả các phiên bản Ubuntu không?
Không, systemctl không có sẵn trên tất cả các phiên bản Ubuntu. systemctl là một phần của hệ thống init systemd, là mặc định trong hầu hết các phiên bản Ubuntu hiện đại (từ 15.04 trở đi). Thay vào đó, các phiên bản cũ hơn hoặc một số cài đặt tối thiểu nhất định có thể sử dụng các hệ thống init thay thế như SysVinit hoặc Upstart.