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_clean
并start_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 Principles
而rel(4)
SASL手册页。
二进制引导脚本文件Name.boot
是Name.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中定义了以下文件类型:
文件类型 | 文件名称/扩展名 | 记录在 |
---|---|---|
模 | .erl | Erlang参考手册 |
包含文件 | .hrl | Erlang参考手册 |
释放资源文件 | 的.rel | rel(4)SASL手册页 |
应用资源文件 | 的.app | 应用程序(4)Kernel中的手册页 |
启动脚本 | 。脚本 | 脚本(4)SASL手册页 |
二进制引导脚本 | .boot | - |
配置文件 | 的.config | 在内核中配置(4)手册页 |
应用程序升级文件 | .appup | appup(4)SASL手册页 |
发布升级文件 | relup | relup(4)SASL手册页 |