Scripting

在引導/啟動期間執行腳本;init.d 與 cron @reboot

  • October 8, 2021

我目前正在嘗試了解在系統啟動/引導時執行腳本init.d和 cron之間的區別。@reboot

使用@reboot(這個方法在這個論壇中被hs.chandra提到過)更簡單一些,只需進入crontab -e並創建一個@reboot /some_directory/to_your/script/your_script.txt然後your_script.txt每次系統重新啟動時都應該執行。一個深入的解釋@reboothere

或者通過嵌入/etc/init.d/your_script.txt到腳本的第二行,即:

#!/bin/bash
# /etc/init.d/your_script.txt

您可以執行chmod +x /etc/init.d/your_script.txt,這也應該導致your_script.txt每次系統啟動時都執行。

  1. 兩者之間的主要區別是什麼?
  2. 哪個更健壯?
  3. 兩者之間有更好的嗎?
  4. 這是嵌入腳本以在引導期間執行的正確方法嗎?

我將合併一個 bash .sh 文件以在啟動期間執行。

init.d,也稱為 SysV 腳本,用於在系統初始化和關閉期間啟動和停止服務。(/etc/init.d/為了兼容性,腳本也在啟用 systemd 的系統上執行)。

  • 該腳本在啟動和關閉期間執行(預設情況下)。
  • 該腳本應該是一個 init.d 腳本,而不僅僅是一個 script 。它應該支持start等等stop(參見Debian 政策
  • 該腳本可以在系統啟動期間執行(您可以定義何時)。

crontab(因此@reboot)。

  • cron 將執行任何正常命令或腳本,這裡沒什麼特別的。
  • 任何使用者都可以添加@reboot腳本(不僅僅是 root)
  • 在帶有 systemd 的 Debian 系統上:cron 的 @reboot 在multi-user.target.
  • 在帶有 SysV(不是 systemd)的 Debian 系統上,crontab(5) 提到:請注意,就@reboot 而言,啟動是 cron(8) 守護程序啟動的時間。特別是,它可能在某些系統守護程序或其他設施啟動之前。這是由於機器的引導順序所致。
  • 在啟動時和定期安排相同的腳本很容易。

**/etc/rc.local**通常被認為是醜陋的或已棄用(至少由redhat),但它仍然具有一些不錯的功能:

  • rc.local 將執行任何正常命令或腳本,這裡沒什麼特別的。
  • 在帶有 SysV(不是 systemd)的 Debian 系統上:rc.local是(幾乎)最後一個啟動的服務。
  • 但是在帶有 systemd: 的 Debian 系統上預設rc.local執行network.target(不是network-online.target!)

關於 systemd 的network.targetand network-online.target,請閱讀Running Services After the Network is up

引用自:https://unix.stackexchange.com/questions/188042