Erlang --- 配置参数

Erlang/OTP的application参数配置

Erlang/OTP中将完成特定功能的一组模块组织起来,称之为application。 

erlang/OTP的application模块是一种最基本的behavior,是Erlang代码和功能组织的形式。

application运行时可能需要提供某些参数,以调整运行时的行为。例如数据库的连接参数(主机名,端口号等),这些参数可以存放在静态配置文件中,application运行时可以通过调application:get_env(ParamKey)得到当前应用程序配置的参数值。get_env(Application, Par)得到其它application的配置参数值。 

实际上,application的参数可以在很多地方配置(例如: 在静态配置文件中配置,一般是application的.app文件,甚至在erlang启动时作为启动命令的一部分为某个应用程序配置运行参数),因此搞清这些不同地方进行配置关系(比如配置的缺省位置和如何覆盖override参数)是进行erlang OTP开发的基本功。

每个application的运行参数可视为一种环境参数,这些参数可以在三个层次进行配置

第一层:Application Resource File(.app文件),每个application都要自己的资源文件,这些文件都有统一的格式,其中有个env属性,用于为本application配置环境参数。资源文件中的参数只限于本application,所以application的缺省参数在此配置最好。 

第二层:System Configuration File(.config文件),当多个application连同erlang运行时, lib库打包发布时,整个发布包会有一个sys.config,在sys.config文件中配置可以对特定的application的环境参数进行定制:同名的参数将被覆盖。作为整个发布的配置文件, sys.config可以同时对发布包中的多个application进行参数配置。而且在我们的发布里不一定都叫sys.config这个名字,可以在erl命令的选项-config中指定其它名称。

第三层:在erl命令中直接为某个application配置参数,

这一级别显然比较适合在application开发、调试时临时调整application参数用。这些配置参数的值实际上在application启动之前就已生效。

注意:最底层配置的参数总能被上层的参数覆盖,还要注意的一点是:当对系统打包发布(release)时,只能通过修改System Configuration File(默认名是sys.config的文件)覆盖环境配置参数,发布后再修改发布包中application的app文件是没有效果的。

Erlang的启动参数

Erlang是一个介于应用程序和操作系统之间的一个模拟器,

用来控制模拟器行为的是以“+”开头的emulator flags参数。

用来控制erlang运行时系统的是以“-”开头的flags参数。可以用init:get_argument/1获得。

plain arguments是普通参数,在第一个flag参数前,或在--flag之后,-extra后的参数都是普通参数。

对这些参数只研究了几个:

-Application Par Val 把应用中的Par参数设置为值Val;

-args_file FileName 从文件FileName读取命令行参数;

-boot File 指定启动使用的boot文件,默认是$ROOT/bin/start.boot,在这个目录下还有start_clean.boot,start_sasl.boot。如果需要sasl的话,就"-boot start_sasl";

-config Confit指定配置文件,这个是很有用的,比如在programming Erlang里,就用到erl -boot start_sasl -config elog3,其中文件全名是elog3.config。

-extra(init flag) 后面跟的都是普通参数;

-hidden 设置为隐藏节点,该节点会连接集群的所有节点,但是在其他节点执行nodes/0,不会列出它;

-hosts Hosts erlang运行在那些服务器的IP地址;

-id Id 给erlang进程设置一个id,一般和-sname和-name一起用;

-name Name 给一个erlang节点/进程设置一个名称;

-remsh Node 远程启动一个erlang节点,例如:erl –sname node1 -remsh node2@machine2.example.com;

-setcookie Cookie 给节点设置cookie,比如: erl -setcookie SFEWRG34AFDSGAFG35235–name nodex 并且它是运行时可以改的,例如erlang:set_cookie(node(), 'SFEWRG34AFDSGAFG35235');

+P Number erlang节点系统的最大并发进程数。

+e Number ETS表的最大数量;

 

posted @ 2016-04-28 19:42  孔夫子耍大刀  阅读(1800)  评论(0编辑  收藏  举报