如何在 CentOS 7.x 或 RHEL Linux 7 上使用 systemctl


在本文中,我們將學習如何使用 `systemctl` 命令。`systemctl` 是 Linux 發行版新版本中提供的一個新命令,用於控制系統和服務。我們將探討一些在 Linux 中使用 `systemctl` 命令的可能方法。

檢查服務狀態

我們可以使用此命令驗證服務的狀態。以下是檢查服務的命令:

# systemctl status httpd
httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: active (running) since Thu 2016-06-02 06:48:58 EDT; 27s ago
   Docs: man:httpd(8)
   man:apachectl(8)
Main PID: 10011 (httpd)
Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec"
CGroup: /system.slice/httpd.service
      ├─10011 /usr/sbin/httpd -DFOREGROUND
      ├─10012 /usr/sbin/httpd -DFOREGROUND
      ├─10013 /usr/sbin/httpd -DFOREGROUND
      ├─10014 /usr/sbin/httpd -DFOREGROUND
      ├─10015 /usr/sbin/httpd -DFOREGROUND
      └─10016 /usr/sbin/httpd -DFOREGROUND
Jun 02 06:48:57 centos-linux-1.shared systemd[1]: Starting The Apache HTTP Server...
Jun 02 06:48:58 centos-linux-1.shared systemd[1]: Started The Apache HTTP Server.

顯示服務

# systemctl show httpd
Type=notify
Restart=no
NotifyAccess=main
RestartUSec=100ms
TimeoutStartUSec=1min 30s
TimeoutStopUSec=1min 30s
WatchdogUSec=0
WatchdogTimestamp=Thu 2016-06-02 06:48:58 EDT
WatchdogTimestampMonotonic=2588490928
StartLimitInterval=10000000StartLimitBurst=5
StartLimitAction=none
….
.
.
.
.
AssertResult=yes
ConditionTimestamp=Thu 2016-06-02 06:48:57 EDT
ConditionTimestampMonotonic=2587709137
AssertTimestamp=Thu 2016-06-02 06:48:57 ED
AssertTimestampMonotonic=2587709138
Transient=no
This will display all the status information about http (web servers services)
Verifying the Services active or enabled
Here we will verify that the servers are active and they are enabled at system startup
To verify the services active or not we needed to run the below command
# systemctl is-active httpd.service
active

啟用服務在系統啟動時或機器重啟後執行

# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-use.rtarget.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

要檢查服務是否已啟用,請執行以下命令:

# systemctl is-enabled httpd
enabled

要手動啟動或重啟服務,我們可以使用以下命令:

# systemctl start httpd
# systemctl restart httpd

要列出依賴項,我們可以使用以下命令:

# systemctl list-dependencies httpd
httpd.service
├─-.mount
├─system.slice
└─basic.target
├─microcode.service
├─rhel-autorelabel-mark.service
├─rhel-autorelabel. service
├─rhel-configure.service
├─rhel-dmesg.service
├─rhel-loadmodules.service
├─paths.target
├─slices.target
│ ├─-.slice
│ └─system.slice…
…
.
..

列出當前在後臺執行的所有作業

# systemctl list-jobs
No jobs running.

列出所有已安裝的單元檔案

# systemctl list-unit files

列出特定服務的全部已安裝單元檔案

# systemctl list-unit-files | grep httpd
httpd.service enabled

列出所有已安裝的套接字及其型別

# systemctl list-sockets --show-types
LISTEN                          TYPE                          UNIT                                      ACTIVATES
/dev/log                         Datagram                     systemd-journald.socket                  systemd-j
/run/dmeventd-client             FIFO                         dm-event.socket                          dm-event.
/run/dmeventd-server             FIFO                         dm-event.socket                          dm-event.
/run/lvm/lvmetad.socket          Stream                       lvm2-lvmetad.socket                      lvm2-lvme
/run/lvm/lvmpolld.socket         Stream                       lvm2-lvmpolld.socket                     lvm2-lvmp
/run/systemd/initctl/fifo        FIFO                         systemd-initctl.socket                   systemd-i
/run/systemd/journal/socket      Datagram                     systemd-journald.socket                  systemd-j
/run/systemd/journal/stdout      Stream                       systemd-journald.socket                  systemd-j
/run/systemd/shutdownd           Datagram                     systemd-shutdownd.socket                 systemd-s
/run/udev/control                SequentialPacket             systemd-udevd-control.socket             systemd-u
/var/run/dbus/system_bus_socket  Stream                       dbus.socket                              dbus.serv
kobject-uevent 1                 Netlink                      systemd-udevd-kernel.socket              systemd-u
12 sockets listed.
Pass --all to see loaded but inactive sockets, too.

設定/列出預設目標(即執行級別)

# systemctl set-default multi-user.target
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target.
# systemctl get-default
multi-user.target

遮蔽和取消遮蔽服務

在某些情況下,尤其是在大型公司中,一位管理員可能會停止伺服器,而另一位管理員則會啟動服務。為了避免這種情況,我們可以遮蔽和取消遮蔽服務。如果某些服務在未取消遮蔽的情況下被停止,我們將無法再次啟動這些服務。

# systemctl mask httpd
Created symlink from /etc/systemd/system/httpd.service to /dev/null.

檢視遮蔽服務後的狀態

# httpd.service
Loaded: masked (/dev/null)
Active: active (running) since Thu 2016-06-02 07:03:27 EDT; 10min ago
Main PID: 10128 (httpd)
Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec"
CGroup: /system.slice/httpd.service
├─10128 /usr/sbin/httpd -DFOREGROUND
├─10129 /usr/sbin/httpd -DFOREGROUND
├─10130 /usr/sbin/httpd -DFOREGROUND
├─10131 /usr/sbin/httpd -DFOREGROUND
├─10132 /usr/sbin/httpd -DFOREGROUND
└─10133 /usr/sbin/httpd -DFOREGROUND
Jun 02 07:03:27 centos-linux-1.shared systemd[1]: Starting The Apache HTTP Server...
Jun 02 07:03:27 centos-linux-1.shared systemd[1]: Started The Apache HTTP Server.
Jun 02 07:13:47 centos-linux-1.shared systemd[1]: httpd.service: Got notification m....
Jun 02 07:13:57 centos-linux-1.shared systemd[1]: httpd.service: Got notification m....
Jun 02 07:14:07 centos-linux-1.shared systemd[1]: httpd.service: Got notification m....
Jun 02 07:14:17 centos-linux-1.shared systemd[1]: httpd.service: Got notification m....
Hint: Some lines were ellipsized, use -l to show in full.

如果我們嘗試啟動被遮蔽的服務,將會顯示錯誤。

# systemctl start httpd
Failed to start httpd.service: Unit httpd.service is masked.

要取消遮蔽服務以啟動,我們需要執行以下命令:

# systemctl unmask httpd
Removed symlink /etc/systemd/system/httpd.service.

取消遮蔽服務後,我們可以再次啟動服務。

# systemctl start httpd
# systemctl status httpd
httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: active (running) since Thu 2016-06-02 07:03:27 EDT; 18min ago
Docs: man:httpd(8)
man:apachectl(8)
Main PID: 10128 (httpd)
Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec"
CGroup: /system.slice/httpd.service
├─10128 /usr/sbin/httpd -DFOREGROUND
├─10129 /usr/sbin/httpd -DFOREGROUND
├─10130 /usr/sbin/httpd -DFOREGROUND
├─10131 /usr/sbin/httpd -DFOREGROUND
├─10132 /usr/sbin/httpd -DFOREGROUND
└─10133 /usr/sbin/httpd -DFOREGROUND

我們可以建立 Linux 機器上服務的快照。

快照是指系統管理器的已儲存狀態。快照僅用於儲存和恢復正在執行或已停止的單元。

要建立服務的快照,我們可以使用:

# systemctl snapshot httpd
ht.tpdsnapshot

檢視服務快照的狀態

# systemctl status httpd.snapshot
httpd.snapshot
Loaded: loaded
Active: inactive (dead)
Jun 02 07:26:31 centos-linux-1.shared systemd[1]: Created snapshot httpd.snapshot.

刪除快照並檢查服務快照的狀態

# systemctl delete httpd.snapshot
# systemctl status httpd.snapshot
httpd.snapshot
Loaded: not-found (Reason: No such file or directory)
Active: inactive (dead)
Jun 02 07:26:31 centos-linux-1.shared systemd[1]: Created snapshot httpd.snapshot.
Jun 02 07:29:05 centos-linux-1.shared systemd[1]: Removing snapshot httpd.snapshot.

透過本文,我們現在能夠控制 Linux 新版本或最新版本中的服務,其中 `systemctl` 命令取代了舊版 Linux 中的 `service` 命令。希望這將有助於您的工作。

更新於:2020年1月20日

4K+ 瀏覽量

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告