init.rc語法詳解

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 當此服務重啓時,執行某些命令
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章