在 Linux 系統啟動時執行指令碼


根據您具體的 Linux 發行版和您嘗試執行的指令碼型別,有多種方法可以在 Linux 系統啟動時執行指令碼。

  • 使用 systemd - 在使用 systemd 的系統上,您可以為您的指令碼建立一個 systemd 服務檔案並將其配置為在啟動時執行。

  • 使用 cron - 您可以使用 cron 守護程序來安排您的指令碼在啟動時執行。您可以在 cron 表 (crontab) 中新增一行,以便在啟動時特定時間執行您的指令碼。

  • 使用 init.d - 在使用較舊的 init.d 系統的系統上,您可以在 /etc/init.d 目錄中建立一個指令碼,並使用 update-rc.d 命令將其配置為在啟動時執行。

  • 使用 .bashrc 或 .bash_profile - 您可以在您的 .bashrc 或 .bash_profile 中新增您的指令碼命令,以便在每次終端登入時執行指令碼。

  • 使用 /etc/rc.local - 您可以在 /etc/rc.local 檔案中新增您的指令碼命令,此檔案在每次啟動時都會執行。

需要注意的是,您選擇的方法將取決於您的系統的具體細節以及您嘗試執行的指令碼。

使用 cron

要在啟動時使用 cron 執行指令碼,您需要執行以下操作:

  • 開啟終端並鍵入“crontab -e”以開啟 cron 表進行編輯。

  • 在檔案的底部新增一個新行,格式如下:

@reboot /path/to/script arg1 arg2
  • 這一行告訴 cron 在系統重新啟動時執行位於“/path/to/script”的指令碼,並帶有引數“arg1”和“arg2”。

  • 儲存並退出 cron 表。

  • 在終端中鍵入“crontab -l”以驗證指令碼是否已正確新增。

  • 重新啟動系統以測試指令碼是否在啟動時執行。

注意 - 如果您想將指令碼安排在不同的時間或間隔執行,則可以將 @reboot 替換為特定時間或間隔。

示例

/path/to/script arg1 arg2 --> this command run the script every minute.

需要注意的是,指令碼的路徑必須是完整路徑,而不是相對路徑。還要確保指令碼具有執行許可權。

使用 rc.local

要在啟動時使用 rc.local 檔案執行指令碼,您需要執行以下操作:

  • 開啟終端並鍵入“sudo nano /etc/rc.local”以開啟 rc.local 檔案進行編輯。

  • 在“exit 0”行之前新增以下行:

/path/to/script arg1 arg2
  • 這一行告訴系統在系統啟動時執行位於“/path/to/script”的指令碼,並帶有引數“arg1”和“arg2”。

  • 儲存並退出檔案。

  • 在終端中鍵入“sudo chmod +x /etc/rc.local”以使 rc.local 檔案可執行。

  • 重新啟動系統以測試指令碼是否在啟動時執行。

需要注意的是,指令碼的路徑必須是完整路徑,而不是相對路徑。還要確保指令碼具有執行許可權。

使用 init.d

要在啟動時使用 init.d 系統執行指令碼,您需要執行以下操作:

  • 開啟終端並在 /etc/init.d 目錄中建立一個新的指令碼檔案。您可以使用 nano 或 vi 等文字編輯器建立檔案。

  • 在指令碼檔案的頂部新增以下幾行:

#!/bin/sh
BEGIN INIT INFO
Provides: scriptname
Required-Start: $all
Required-Stop: $all
Default-Start: 2 3 4 5
Default-Stop: 0 1 6
Short-Description: Start scriptname at boot time
END INIT INFO
  • 這些行向 init 系統提供有關指令碼的資訊以及何時應執行它。

  • 新增執行指令碼的命令,例如:/path/to/script arg1 arg2

  • 儲存並退出檔案。

  • 在終端中鍵入“sudo chmod +x /etc/init.d/scriptname”以使指令碼檔案可執行。

  • 在終端中鍵入“sudo update-rc.d scriptname defaults”以更新系統以便在啟動時執行指令碼。

  • 重新啟動系統以測試指令碼是否在啟動時執行。

需要注意的是,指令碼的路徑必須是完整路徑,而不是相對路徑。還要確保指令碼具有執行許可權。

使用 systemd

要在啟動時使用 systemd 執行指令碼,您需要執行以下操作:

  • 在 /etc/systemd/system 目錄中建立一個新的服務檔案。您可以使用 nano 或 vi 等文字編輯器建立檔案。檔名應採用“yourscriptname.service”的格式。

  • 將以下幾行新增到服務檔案中:

[Unit]
Description=Description of your script
After=network.target

[Service]
ExecStart=/path/to/script arg1 arg2
Restart=always
User=root
Group=root
Type=simple

[Install]
WantedBy=multi-user.target
  • 儲存並退出檔案。

  • 執行以下命令“sudo systemctl daemon-reload”以重新載入 systemd 管理器配置。

  • 執行以下命令“sudo systemctl enable yourscriptname.service”以啟用服務。

  • 執行以下命令“sudo systemctl start yourscriptname.service”以啟動服務。

  • 重新啟動系統以測試指令碼是否在啟動時執行。

需要注意的是,指令碼的路徑必須是完整路徑,而不是相對路徑。還要確保指令碼具有執行許可權。

“Unit”部分中的“After”欄位可以設定為不同的值,具體取決於指令碼的依賴項,例如,如果您的指令碼需要網路啟動,則其值應為“network.target”,否則可以使用“default.target”。

結論

有多種方法可以在 Linux 系統啟動時執行指令碼,包括使用 systemd、cron、init.d、.bashrc 或 .bash_profile 和 rc.local。您選擇的方法將取決於系統的具體細節以及您嘗試執行的指令碼。需要注意的是,指令碼的路徑必須是完整路徑,而不是相對路徑,還要確保指令碼具有執行許可權。此外,啟動時執行指令碼的方法也可能因您使用的 Linux 發行版而異,因此如果您不確定,最好檢視文件或諮詢專家。

更新於:2023年10月31日

77K+ 次檢視

啟動您的 職業生涯

透過完成課程獲得認證

開始學習
廣告