查看源代码 script

启动脚本

描述

启动脚本描述了 Erlang 运行时系统如何启动。它包含了加载哪些代码,以及启动哪些进程和应用程序的指令。

命令 erl -boot Name 使用名为 Name.boot 的启动文件启动系统,该文件使用 systools:script2boot/1Name.script 文件生成。

.script 文件由 systools.rel 文件和 .app 文件生成。

文件语法

启动脚本存储在扩展名为 .script 的文件中。该文件具有以下语法:

{script, {Name, Vsn},
 [
  {progress, loading},
  {preLoaded, [Mod1, Mod2, ...]},
  {path, [Dir1,"$ROOT/Dir",...]}.
  {primLoad, [Mod1, Mod2, ...]},
  ...
  {kernel_load_completed},
  {progress, loaded},
  {kernelProcess, Name, {Mod, Func, Args}},
  ...
  {apply, {Mod, Func, Args}},
  ...
  {progress, started}]}.
  • Name = string() - 定义系统名称。

  • Vsn = string() - 定义系统版本。

  • {progress, Term} - 设置初始化程序的“进度”。init:get_status/0 函数返回当前进度值,其格式为 {InternalStatus,Term}

  • {path, [Dir]} - Dir 是一个字符串。此参数将系统的加载路径设置为 [Dir]。用于加载模块的加载路径从脚本文件中给定的初始加载路径,以及命令行参数中提供的任何路径标志获得。命令行参数按如下方式修改路径:

    • -pa Dir1 Dir2 ... DirN 将目录 DirN, DirN-1, ..., Dir2, Dir1 添加到初始加载路径的前面。
    • -pz Dir1 Dir2 ... DirN 将目录 Dir1, Dir2, ..., DirN 添加到初始加载路径的末尾。
    • -path Dir1 Dir2 ... DirN 定义一组目录 Dir1, Dir2, ..., DirN,这些目录将替换脚本文件中给定的搜索路径。路径中的目录名称解释如下:
      • / 开头的目录名称被认为是绝对路径名称。
      • 不以 / 开头的目录名称被认为是相对于当前工作目录的相对路径名称。
      • 特殊的 $ROOT 变量只能在脚本中使用,而不能作为命令行参数使用。给定的目录是相对于 Erlang 安装目录的。
  • {primLoad, [Mod]} - 从 Path 中指定的目录加载模块 [Mod]。脚本解释器通过调用 erl_prim_loader:get_file(Mod) 获取适当的模块。如果无法找到模块,则会发生导致系统终止的致命错误。

  • {kernel_load_completed} - 表示在启动任何进程之前必须加载的所有模块都已加载。在交互模式下,此命令之后解释的所有 {primLoad,[Mod]} 命令都将被忽略,这些模块将按需加载。在嵌入式模式下,kernel_load_completed 将被忽略,所有模块在系统启动期间加载。

  • {kernelProcess, Name, {Mod, Func, Args}} - 通过评估 apply(Mod, Func, Args) 来启动“内核进程” Name。启动函数应返回 {ok, Pid}ignoreinit 进程会监控 Pid 的行为,并在 Pid 死亡时终止系统。内核进程是运行时系统的关键组件。用户通常不会添加新的内核进程。

  • {apply, {Mod, Func, Args}}. - init 进程评估 apply(Mod, Func, Args)。如果这导致错误,系统将终止。如果此函数永远不返回,启动过程将挂起。

注意

在交互式系统中,代码加载器提供按需代码加载,但在嵌入式系统中,代码加载器会立即加载所有代码。在这两种情况下都使用相同版本的 code。代码服务器调用 init:get_argument(mode) 来确定它是在按需模式还是非按需驱动模式下运行。

另请参阅

systools