init.rc腳本的4種類型
- Action(動作)
- Commands(命令)
- Services(服務)
- Options(選項)
Action
格式:
on < trigger > ##觸發條件
< command1 > ## 執行命令
< command2 > ##可以執行多個命令
< command3 >
…
比如系統源碼中的:
on property:sys.boot_from_charger_mode=1
class_stop charger
trigger late-init
當相應的事件發生時,系統會對init.rc中的各進行匹配,只要發現符合條件的Action,就會把它加入”命令執行隊列”的尾部,(除非這個Action在隊列中已經存在)。然後系統在對這些命令按順序執行。
Commands
trigger
Trigger | Description |
---|---|
bott | 這是init程序啓動後出發的第一個事件 |
< name > = < value > | 當屬性< name >滿足特定< value >時觸發 |
device-added-< path> | 當設備節點添加/刪除時觸發此事件 |
service-exited-< name > | 當指定的服務< name >存在時觸發 |
Commands
Command | Description |
---|---|
exec < path > [< argument >]* | Fork並執行一個程序,其路徑爲< path >,這條命令將阻塞直到該程序啓動完成,因此他有可能造成init程序在某個點不停的等待。 |
export < name >< value > | 設置某個環境變量< name >的值爲< value >,這是對全局有效的,即其後的所有進程都將繼承這個變量。 |
ifup < interface > | 使網絡接口< interface >成功連接。 |
import < filename > | 解析另外一個配置文件,名爲< filename >,以擴展當前配置。 |
hostname < name > | 設置主機名爲< name > |
chdir < directory > | 更改工作目錄爲< directory > |
chmod < octal-modc > | 更改文件訪問權限 |
chown < owner >< group >< path > | 更改文件所有者和組羣 |
chroot < directory > | 更改根目錄位置 |
class_start < serviceclass > | 啓動由< servicesclass >類名指定的所有相關服務,如果他們不存在運行狀態的話 |
class_stop < serviceclass > | 停止所有由< serviceclass >指定的服務,如果他們當前正在運行的話 |
domainname < name > | 設置域名 |
insmod < path > | 在< path >路徑上安裝一個模塊 |
mkdir < path >[mode][owner][group] | 在< path >上新建一個目錄 |
mount < type >< device >< dir >[mountoption] | 嘗試在指定路徑上掛載一個設備 |
setkey | 目前沒有定義 |
setprop< name >< value > | 設置系統屬性< name >的值< value > |
start < service > | 這個命令將啓動一個服務,如果他沒有處於運行狀態的話 |
stop < service > | 這個命令將啓動一個服務,如果他沒有處於運行狀態的話 |
symlink < target >< path > | 創建一個< path >路徑的連接,目標爲< target > |
sysclktz | 設置基準時間,如果當前時間是GMT,這個值爲0 |
trigger < event > | 觸發一個事件 |
write < path >< string >[ < string >]* | 打開一個文件,並寫入一個或多個字符串 |
Services
在特定選項的約束下唄init程序運行或者重啓.
格式:
service < name >< pathname > [ < argument >]*
< option >
< option >
…
參數解釋:
- name 表示此service的名稱
- pathname 此service所在路徑。
- argument 啓動service所帶的參數
- option 對此service的約束選項。
options
Services中的可用選項:
option | Description |
---|---|
critical | 表明這個對設備至關重要的服務,如果他在四分鐘內退出超過4次,則設備將重啓進入恢復模式 |
disable | 此服務不會自動啓動,而是需要通過顯示調用服務名來啓動 |
setenv < name >< value > | 設置環境變量< name >爲某個值< value > |
socket < name >< type >< perm >[< user >[ < group >]] | 創建一個名爲/dev/socket/< name >的Unix domain socket,然後將他的fd值傳給啓動它的進程,有效的< type >值包括dgram,steam和seqpacket.而user和group的默認值是0 |
user < username > | 在啓動服務前將用戶切換至< username >,默認情況下用戶都是root |
group < groupname >[< groupname >] | 在啓動服務將用戶組切換至< groupname > |
oneshot | 當此服務退出時,不要主動去重啓他 |
class < name > | 爲該服務指定一個class名,同一個class的所有服務必須同時自動或者停止,默認情況下服務的class名是”default” |
onrestart | 當此服務重啓時,執行某些命令 |