A configuration file contains values for configuration
parameters for the applications in the system. The erl
command-line argument -config Name tells the system to use
data in the system configuration file Name.config.
Configuration parameter values in the configuration file
override the values in the application resource files (see
app(4)).
The values in the configuration file can be
overridden by command-line flags (see
erts:erl(1)).
The value of a configuration parameter is retrieved by calling
application:get_env/1,2.
sys.config
When starting Erlang in embedded mode, it is assumed that
exactly one system configuration file is used, named
sys.config. This file is to be located in
$ROOT/releases/Vsn, where $ROOT is the Erlang/OTP
root installation directory and Vsn is the release version.
Release handling relies on this assumption. When installing a
new release version, the new sys.config is read and used
to update the application configurations.
This means that specifying another .config file, or more
.config files, leads to inconsistent update of application
configurations. There is, however, a syntax for
sys.config that allows pointing out other
.config files:
[{Application, [{Par, Val}]} | File].
File = string()
- Name of another .config file.
Extension .config can be omitted. It is
recommended to use absolute paths. If a relative path is used,
File is searched, first, relative from sys.config directory, then relative
to the current working directory of the emulator, for backward compatibility.
This allow to use a sys.config pointing out other .config files in a release
or in a node started manually using -config ... with same result whatever
the current working directory.
When traversing the contents of sys.config and a filename
is encountered, its contents are read and merged with the result
so far. When an application configuration tuple
{Application, Env} is found, it is merged with the result
so far. Merging means that new parameters are added and existing
parameter values overwritten.
Example:
sys.config:
[{myapp,[{par1,val1},{par2,val2}]},
"/home/user/myconfig"].
myconfig.config:
[{myapp,[{par2,val3},{par3,val4}]}].
This yields the following environment for myapp:
[{par1,val1},{par2,val3},{par3,val4}]
The behavior if a file specified in sys.config does not
exist, or is erroneous, is backwards compatible.
Starting the runtime system will fail. Installing a new release
version will not fail, but an error message is returned and
the erroneous file is ignored.