在线文档教程

1.系统原则 | 1. System Principles

1系统原则

1.1启动系统

Erlang运行时系统使用命令启动erl

% erl Erlang/OTP 17 [erts-6.0] [hipe] [smp:8:8] Eshell V6.0 (abort with ^G) 1>

erl了解许多命令行参数,请参阅erl(1)ERTS中的手册页。其中一些也在本章中描述。

应用程序可以通过调用函数init:get_argument(Key)或者来访问命令行参数的值init:get_arguments()。请参阅init(3)ERTS中的手册页。

1.2系统的重新启动和停止

运行时系统通过调用被暂停halt/0,1。有关详细信息,请参阅erlang(3)ERTS中的手册页。

该模块init包含用于重新启动,重新启动和停止运行系统的功能:

init:restart() init:reboot() init:stop()

有关详细信息,请参阅init(3)ERTS中的手册页。

如果Erlang shell终止,运行时系统将终止。

1.3启动脚本

运行系统使用启动脚本启动。启动脚本包含关于要加载哪些代码以及启动哪些进程和应用程序的说明。

启动脚本文件具有扩展名.script。运行时系统使用脚本的二进制版本。该二进制引导脚本文件具有扩展名.boot

使用哪个引导脚本由命令行标志指定-boot。扩展名将.boot被省略。例如,使用启动脚本start_all.boot

% erl -boot start_all

如果没有指定引导脚本,则默认为ROOT/bin/start,请参阅Default Boot Scripts

命令行标志-init_debug使init进程在解释启动脚本时写入一些调试信息:

% erl -init_debug {progress,preloaded} {progress,kernel_load_completed} {progress,modules_loaded} {start,heart} {start,error_logger} ...

有关引导脚本的语法和内容的详细说明,请参阅script(4)SASL中的手册页。

默认启动脚本

Erlang/OTP附带了以下引导脚本:

  • start_clean.boot - 加载代码并启动应用程序Kernel和STDLIB。

  • start_sasl.boot - 加载代码并启动应用程序Kernel,STDLIB和SASL)。

  • no_dot_erlang.boot - 加载代码并启动应用程序Kernel和STDLIB。跳过加载文件.erlang。对于不考虑用户偏好而行为相同的脚本和其他工具很有用。

其中start_cleanstart_sasl作为默认使用由用户安装的Erlang / OTP使用时决定Install。用户被问到“您是否想使用最小系统启动而不是SASL启动”。如果答案是肯定的,则start_clean使用,否则start_sasl使用。选定的启动脚本的副本被制作,命名start.boot并放置在目录中ROOT/bin

用户定义的启动脚本

有时有用或必须创建用户定义的引导脚本。尤其是在嵌入式模式下运行Erlang时,请参阅Code Loading Strategy

引导脚本可以手动写入。但是,建议Name.rel使用该函数通过从发布资源文件生成引导脚本来创建引导脚本systools:make_script/1,2。这要求源代码根据OTP设计原则构建为应用程序。(该程序不必从OTP应用程序开始,但可以是简单的Erlang)。

有关.rel文件,见OTP Design Principlesrel(4)SASL手册页。

二进制引导脚本文件Name.bootName.script使用该函数从引导脚本文件生成的systools:script2boot(File)

1.4码加载策略

运行时系统可以嵌入式交互式模式启动。哪一个是由命令行标志决定的-mode

% erl -mode embedded

默认模式是interactive

模式属性如下:

  • 在嵌入模式下,根据引导脚本在系统启动期间加载所有代码。(代码也可以稍后通过明确命令代码服务器来加载。)

  • 在交互模式下,代码在第一次引用时动态加载。当对模块中的功能进行调用并且未加载模块时,代码服务器将搜索代码路径并将模块加载到系统中。

最初,代码路径由当前工作目录和所有目标代码目录组成ROOT/lib,其中ROOT是Erlang/OTP的安装目录。目录可以被命名Name[-Vsn]。代码服务器默认选择具有相同版本号的版本号最高的目录Name。该-Vsn后缀是可选的。如果ebin目录下存在Name[-Vsn]目录,则将该目录添加到代码路径中。

代码路径可以通过使用命令行标志-pa Directories-pz Directories。这些分别添加Directories到代码路径的头部或末尾。例:

% erl -pa /home/arne/mycode

代码服务器模块code包含许多用于修改和检查搜索路径的函数,请参阅code(3)Kernel中的手册页。

1.5文件类型

Erlang/OTP中定义了以下文件类型:

文件类型文件名称/扩展名记录在
.erlErlang参考手册
包含文件.hrlErlang参考手册
释放资源文件的.relrel(4)SASL手册页
应用资源文件的.app应用程序(4)Kernel中的手册页
启动脚本。脚本脚本(4)SASL手册页
二进制引导脚本.boot-
配置文件的.config在内核中配置(4)手册页
应用程序升级文件.appupappup(4)SASL手册页
发布升级文件reluprelup(4)SASL手册页