Hướng dẫn sử dụng lệnh systemctl trong Linux

Hướng dẫn sử dụng lệnh systemctl trong Linux

1. Tổng quan về lệnh systemctl

Lệnh systemctl là công cụ quản lý dịch vụ trong systemd. Nó cho phép quản lý các dịch vụ, tiến trình và các mô-đun khác trong hệ thống. Lệnh systemctl có thể được sử dụng để khởi động, dừng, khởi động lại và kiểm tra trạng thái của các dịch vụ. Các tính năng chính của lệnh systemctl bao gồm:

  • Khởi động, dừng và khởi động lại các dịch vụ.
  • Kiểm tra trạng thái của các dịch vụ.
  • Xem các thông tin chi tiết về các dịch vụ.
  • Quản lý các file cấu hình dịch vụ.

2. Các lệnh cơ bản của systemctl

Lệnh systemctl có nhiều tùy chọn để quản lý các dịch vụ. Dưới đây là các lệnh cơ bản của systemctl:

  • Khởi động dịch vụ: systemctl start service-name
  • Dừng dịch vụ: systemctl stop service-name
  • Khởi động lại dịch vụ: systemctl restart service-name
  • Kiểm tra trạng thái của dịch vụ: systemctl status service-name
  • Xem các thông tin chi tiết về dịch vụ: systemctl show service-name
  • Bật dịch vụ tự động khởi: systemctl enable service-name

3. Cách sử dụng lệnh systemctl

3.1. Khởi động, dừng và khởi động lại dịch vụ

Để khởi động một dịch vụ, bạn có thể sử dụng lệnh sau:

sudo systemctl start service-name

Ví dụ: sudo systemctl start apache2 để khởi động dịch vụ Apache.

Tương tự, để dừng dịch vụ, bạn có thể sử dụng lệnh:

sudo systemctl stop service-name

Ví dụ: sudo systemctl stop apache2 để dừng dịch vụ Apache.

Để khởi động lại dịch vụ, bạn có thể sử dụng lệnh:

sudo systemctl restart service-name

Ví dụ: sudo systemctl restart apache2 để khởi động lại dịch vụ Apache.

3.2. Kiểm tra trạng thái của dịch vụ

Để kiểm tra trạng thái của một dịch vụ, bạn có thể sử dụng lệnh sau:

sudo systemctl status service-name

Ví dụ: sudo systemctl status apache2 để kiểm tra trạng thái của dịch vụ Apache.

Kết quả trả về sẽ cho bạn biết trạng thái hiện tại của dịch vụ (đang hoạt động, đã dừng, hoặc đang khởi động).

3.3. Xem các thông tin chi tiết về dịch vụ

Để xem các thông tin chi tiết về một dịch vụ, bạn có thể sử dụng lệnh sau:

sudo systemctl show service-name

Ví dụ: sudo systemctl show apache2 để xem các thông tin chi tiết về dịch vụ Apache.

Kết quả trả về sẽ cho bạn biết các thông tin chi tiết về dịch vụ, bao gồm tên, mô tả, file cấu hình, và các thông số khác.

3.4. Quản lý các file cấu hình dịch vụ

Lệnh systemctl cũng cho phép bạn quản lý các file cấu hình của dịch vụ. Các file cấu hình này có thể được tìm thấy trong thư mục /etc/systemd/system.

Để xem các file cấu hình của một dịch vụ, bạn có thể sử dụng lệnh sau:

sudo systemctl cat service-name

Ví dụ: sudo systemctl cat apache2 để xem các file cấu hình của dịch vụ Apache.

Nếu bạn muốn chỉnh sửa các file cấu hình này, bạn có thể sử dụng trình soạn thảo văn bản để mở file và chỉnh sửa nội dung.

3.5 Kiểm tra danh sách toàn bộ các dịch vụ trên hệ thống

systemctl list-units --type=service
hoặc
systemctl --type=service

3.6 Kiểm tra các dịch vụ đang active

sudo systemctl list-units --type=service --state=active
sudo systemctl --type=service --state=active

3.7 Liệt kê các dịch vụ đang chạy

systemctl list-units --type=service --state=running
hoặc
systemctl --type=service --state=running
hoặc
systemctl list-unit-files --type service --state enabled,generated
sudo systemctl list-unit-files --type service --state enabled,generated
UNIT FILE STATE PRESET
accounts-daemon.service enabled enabled
apparmor.service enabled enabled
avahi-daemon.service enabled enabled
bluetooth.service enabled enabled
console-setup.service enabled enabled
containerd.service enabled enabled
cron.service enabled enabled
cups-browsed.service enabled enabled
cups.service enabled enabled
docker.service enabled enabled
dphys-swapfile.service enabled enabled
e2scrub_reap.service enabled enabled
fail2ban.service enabled enabled
fake-hwclock.service enabled enabled
getty@.service enabled enabled
glamor-test.service enabled enabled
hciuart.service enabled enabled
keyboard-setup.service enabled enabled
lightdm.service enabled enabled
mariadb.service enabled enabled
ModemManager.service enabled enabled
networking.service enabled enabled
NetworkManager-dispatcher.service enabled enabled
NetworkManager-wait-online.service enabled enabled
NetworkManager.service enabled enabled
nftables.service enabled enabled
nginx.service enabled enabled
php8.2-fpm.service enabled enabled
raspi-config.service generated -
rp1-test.service enabled enabled
rpi-display-backlight.service enabled enabled
rpi-eeprom-update.service enabled enabled
ssh.service enabled enabled
sshswitch.service enabled enabled
systemd-pstore.service enabled enabled
systemd-timesyncd.service enabled enabled
triggerhappy.service enabled enabled
udisks2.service enabled enabled
wpa_supplicant.service enabled enabled

39 unit files listed.

4. Câu hỏi thường gặp về lệnh systemctl

4.1. Làm thế nào để khởi động một dịch vụ khi hệ thống khởi động?

Để khởi động một dịch vụ khi hệ thống khởi động, bạn có thể sử dụng lệnh sau:

sudo systemctl enable service-name

Ví dụ: sudo systemctl enable apache2 để khởi động dịch vụ Apache khi hệ thống khởi động.

4.2. Làm thế nào để ngăn chặn một dịch vụ khởi động khi hệ thống khởi động?

Để ngăn chặn một dịch vụ khởi động khi hệ thống khởi động, bạn có thể sử dụng lệnh sau:

sudo systemctl disable service-name

Ví dụ: sudo systemctl disable apache2 để ngăn chặn dịch vụ Apache khởi động khi hệ thống khởi động.

4.3. Làm thế nào để kiểm tra xem một dịch vụ đã được khởi động khi hệ thống khởi động?

Để kiểm tra xem một dịch vụ đã được khởi động khi hệ thống khởi động, bạn có thể sử dụng lệnh sau:

sudo systemctl is-enabled service-name

Ví dụ: sudo systemctl is-enabled apache2 để kiểm tra xem dịch vụ Apache đã được khởi động khi hệ thống khởi động.

Kết quả trả về sẽ là “enabled” nếu dịch vụ đã được khởi động, hoặc “disabled” nếu dịch vụ chưa được khởi động.

4.4. Liệt kê các service phụ thuộc

systemctl list-dependencies <Tên service> --reverse
systemctl list-dependencies snap.lxd.activate.service --reverse
# systemctl list-dependencies snap.lxd.activate.service --reverse
snap.lxd.activate.service
● └─multi-user.target
● └─graphical.target

Thiết lập không cho phép khởi động dịch vụ

sudo systemctl mask <SERVICE-NAME>

Kiểm tra tình trạng dịch vụ:

systemctl status apt-daily-upgrade.service


○ apt-daily-upgrade.service – Daily apt upgrade and clean activities
Loaded: loaded (/lib/systemd/system/apt-daily-upgrade.service; static)
Active: inactive (dead) since Thu 2024-07-04 19:33:58 +07; 19min ago
TriggeredBy: ● apt-daily-upgrade.timer
Docs: man:apt(8)
Process: 10344 ExecStartPre=/usr/lib/apt/apt-helper wait-online (code=exited, status=0/SUCCESS)
Process: 10368 ExecStart=/usr/lib/apt/apt.systemd.daily install (code=exited, status=0/SUCCESS)
Main PID: 10368 (code=exited, status=0/SUCCESS)
CPU: 873ms

Jul 04 19:33:57 master01 systemd[1]: Starting Daily apt upgrade and clean activities…
Jul 04 19:33:58 master01 systemd[1]: apt-daily-upgrade.service: Deactivated successfully.
Jul 04 19:33:58 master01 systemd[1]: Finished Daily apt upgrade and clean activities.

sudo systemctl mask apt-daily-upgrade.service

sudo systemctl mask apt-daily-upgrade.service
Created symlink /etc/systemd/system/apt-daily-upgrade.service → /dev/null.

Kiểm tra lại

sudo systemctl start apt-daily-upgrade.service

Failed to start apt-daily-upgrade.service: Unit apt-daily-upgrade.service is masked.

sudo systemctl status apt-daily-upgrade.service

○ apt-daily-upgrade.service
Loaded: masked (Reason: Unit apt-daily-upgrade.service is masked.)
Active: inactive (dead) since Thu 2024-07-04 19:33:58 +07; 22min ago
TriggeredBy: ● apt-daily-upgrade.timer
Main PID: 10368 (code=exited, status=0/SUCCESS)
CPU: 873ms

Jul 04 19:33:57 master01 systemd[1]: Starting Daily apt upgrade and clean activities…
Jul 04 19:33:58 master01 systemd[1]: apt-daily-upgrade.service: Deactivated successfully.
Jul 04 19:33:58 master01 systemd[1]: Finished Daily apt upgrade and clean activities.

Để cho phép chạy lại phải thực hiện unmask

sudo systemctl unmask <SERVICE-NAME>

sudo systemctl unmask apt-daily-upgrade.service
Removed /etc/systemd/system/apt-daily-upgrade.service.

5. Viết script khởi động cùng Systemd

5.1 Tạo file trong systemd. Ví dụ:

sudo nano /etc/systemd/system/tomcat.service

[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target

[Service]
Type=forking

User=tomcat
Group=tomcat

Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat

ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh

RestartSec=10
Restart=always

[Install]
WantedBy=multi-user.target

Khởi động systemd để nhận biết dịch vụ mới:

sudo systemctl daemon-reload

Tự động bật khi hệ thống khởi động: 

sudo systemctl enable tomcat

Khởi động dịch vụ:

sudo systemctl start tomcat

Kiểm tra tình trạng

sudo systemctl status tomcat

Phân tích thời gian khởi động máy với systemd-analyze

root@master01:~# systemd-analyze

Startup finished in 31.413s (kernel) + 51.388s (userspace) = 1min 22.801s
graphical.target reached after 35.411s in userspace
root@master01:~# systemd-analyze blame
35.096s mnt-nfs_write.mount
35.030s mnt-nfs_read.mount
19.604s motd-news.service
18.501s snap.lxd.activate.service
16.938s containerd.service
14.949s snapd.service
4.915s systemd-networkd-wait-online.service
4.222s ModemManager.service
3.896s dev-mapper-ubuntu\x2d\x2dvg\x2dubuntu\x2d\x2dlv.device
3.423s udisks2.service
2.640s cloud-init-local.service
2.552s dev-loop4.device
2.515s dev-loop1.device
2.511s dev-loop3.device
2.502s dev-loop0.device
2.444s dev-loop2.device
2.410s dev-loop5.device

systemd-analyze time


Startup finished in 31.413s (kernel) + 51.388s (userspace) = 1min 22.801s
graphical.target reached after 35.411s in userspace

 systemd-analyze blame

Kết luận

Lệnh systemctl là một công cụ quan trọng trong Linux để quản lý các dịch vụ trên hệ thống. Với các lệnh khác nhau, bạn có thể khởi động, dừng, kiểm tra trạng thái, xem thông tin chi tiết, và quản lý các file cấu hình của các dịch vụ.

Việc hiểu và sử dụng lệnh systemctl sẽ giúp bạn quản lý hệ thống Linux của mình hiệu quả hơn và tránh được những vấn đề không đáng có. Hy vọng bài viết này đã giúp bạn hiểu rõ hơn về cách sử dụng lệnh systemctl trong Linux.

Tham khảo

https://systemd.io

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply