天天看點

如何在 Systemd 下配置并運作關機前的腳本?

作者:嵌入式小美老師

Systemd 是一種用于管理 Linux 系統的初始化和服務管理工具。它提供了強大的功能,允許使用者在關機或重新開機系統之前運作自定義腳本。這對于執行清理任務、儲存資料或執行其他系統管理操作非常有用。本文将詳細介紹如何在 Systemd 下配置并運作關機前的腳本。

如何在 Systemd 下配置并運作關機前的腳本?

了解 Systemd 關機過程

在開始配置之前,我們需要了解 Systemd 的關機過程。當您選擇關機或重新開機系統時,Systemd 會發送一個關機信号給所有運作中的服務,并逐個關閉它們。然後,它将運作關機目标的相關任務,以便在系統關閉之前執行所需的操作。這些任務可以是預定義的或使用者定義的腳本。

建立腳本檔案

首先,我們需要建立一個腳本檔案,其中包含在關機前要執行的操作。可以使用任何喜歡的文本編輯器建立一個新檔案,并将其儲存為 .service 檔案擴充名。

示例腳本檔案 pre-shutdown-script.service:

[Unit]
Description=Pre-Shutdown Script

[Service]
Type=oneshot
ExecStart=/path/to/your/script.sh

[Install]
WantedBy=multi-user.target
           

在上面的示例中,ExecStart 行指定要運作的腳本的路徑。請将 /path/to/your/script.sh 替換為您實際的腳本路徑。

将腳本檔案複制到 Systemd 目錄

将腳本檔案複制到 Systemd 的服務目錄中,使 Systemd 可以找到它。服務目錄通常位于 /etc/systemd/system/ 或 /usr/lib/systemd/system/ 下。

使用以下指令将腳本檔案複制到 /etc/systemd/system/ 目錄:

sudo cp pre-shutdown-script.service /etc/systemd/system/
           

重新整理 Systemd 配置

複制腳本檔案後,需要重新整理 Systemd 配置以使其生效。運作以下指令重新整理 Systemd 配置:

sudo systemctl daemon-reload
           

配置關機前運作的腳本

要配置 Systemd 在關機前運作腳本,需要建立一個關聯關系。運作以下指令建立關聯關系:

sudo systemctl enable pre-shutdown-script.service
           

這将建立一個符号連結,将腳本檔案與關機目标關聯起來,以便在關機時執行腳本。

測試腳本配置

現在,您可以測試腳本配置是否正常工作。運作以下指令來模拟關機并檢視腳本是否被執行:

sudo systemctl start pre-shutdown-script.service
sudo systemctl stop
           

如果腳本成功執行,您将看到相關的輸出或操作效果。

## 檢視腳本執行日志

為了友善調試和檢視腳本執行的日志,您可以配置 Systemd 記錄關機前腳本的輸出。您可以使用 StandardOutput 和 StandardError 選項來指定日志檔案的位置。

修改腳本檔案 pre-shutdown-script.service:

[Unit]
Description=Pre-Shutdown Script

[Service]
Type=oneshot
ExecStart=/path/to/your/script.sh
StandardOutput=file:/path/to/logfile.log
StandardError=file:/path/to/errorlog.log

[Install]
WantedBy=multi-user.target
           

将 /path/to/logfile.log 替換為您希望儲存标準輸出的日志檔案路徑,将 /path/to/errorlog.log 替換為您希望儲存錯誤輸出的日志檔案路徑。

儲存檔案後,使用以下指令重新整理 Systemd 配置:

sudo systemctl daemon-reload
           

然後重新啟動腳本服務:

sudo systemctl start pre-shutdown-script.service
           

您可以檢視指定的日志檔案以檢查腳本的輸出和錯誤資訊。

自定義腳本執行順序

如果您希望腳本在關機過程的特定階段運作,您可以修改腳本的 WantedBy 部分。Systemd 使用不同的關機目标來表示關機過程的不同階段,例如 halt.target、reboot.target 或 poweroff.target。

要更改腳本的關聯關系,将 WantedBy 部分的值更改為所需的關機目标。

示例:

[Install]
WantedBy=poweroff.target
           

在上面的示例中,腳本将與 poweroff.target 關聯,這意味着它将在系統關機時運作。

删除腳本配置

如果您不再需要在 Systemd 下運作關機前的腳本,可以按照以下步驟進行删除。

  1. 停止腳本服務:
sudo systemctl stop pre-shutdown-script.service
           
  1. 禁用腳本服務:
sudo systemctl disable pre-shutdown-script.service
           
  1. 删除腳本檔案:
sudo rm /etc/systemd/system/pre-shutdown-script.service
           
  1. 重新整理 Systemd 配置:
sudo systemctl daemon-reload
           

總結

在 Systemd 下運作關機前的腳本可以讓您在系統關機或重新開機之前執行自定義操作。通過建立腳本檔案、配置關聯關系和重新整理 Systemd 配置,您可以輕松地實作此功能。記得測試和調試腳本配置,并檢視日志以擷取有關腳本執行的詳細資訊。使用這些步驟和技巧,您将能夠更好地管理和控制系統關機過程中的操作和任務。

嵌入式物聯網需要學的東西真的非常多,千萬不要學錯了路線和内容,導緻工資要不上去!

分享大家一個資料包,差不多150多G。裡面學習内容、面經、項目都比較新也比較全!

掃碼進群領資料

如何在 Systemd 下配置并運作關機前的腳本?

轉載自:運維漫談

文章來源于如何在 Systemd 下配置并運作關機前的腳本?

原文連結:https://mp.weixin.qq.com/s/HdYeJJvbBU0X5qtXOdIHdA

繼續閱讀