Scripting
在引導/啟動期間執行腳本;init.d 與 cron @reboot
我目前正在嘗試了解在系統啟動/引導時執行腳本
init.d
和 cron之間的區別。@reboot
使用
@reboot
(這個方法在這個論壇中被hs.chandra提到過)更簡單一些,只需進入crontab -e
並創建一個@reboot /some_directory/to_your/script/your_script.txt
然後your_script.txt
每次系統重新啟動時都應該執行。一個深入的解釋@reboot
是here或者通過嵌入
/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
每次系統啟動時都執行。
- 兩者之間的主要區別是什麼?
- 哪個更健壯?
- 兩者之間有更好的嗎?
- 這是嵌入腳本以在引導期間執行的正確方法嗎?
我將合併一個 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.target
andnetwork-online.target
,請閱讀Running Services After the Network is up。