You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向erl -config指令传参实现sys.config配置文件动态化

Erlang启动时动态调整sys.config配置的实现方法

方法1:启动参数直接覆盖配置项(最简便)

这是Erlang原生支持的能力,参数优先级高于sys.config中的配置,无需修改配置文件即可动态调整:

  • 语法规则:-<应用名> <配置键> <配置值>,直接跟在原有启动命令后即可生效
  • 示例:
    假设你的sys.config内容如下:
[{kernel, [{logger_level, info}]},
 {my_app, [{listen_port, 8080}, {run_mode, prod}]}].

你要在启动时把日志级别改成debug、监听端口改成9000,直接执行以下命令即可:
erl -config sys.config -kernel logger_level debug -my_app listen_port 9000 [其他自定义Args]
启动后调用application:get_env(my_app, listen_port)就能拿到覆盖后的9000值。

注意:如果配置值是字符串类型,需要在外层加单引号、内层加双引号,比如修改host配置的命令为:erl -config sys.config -my_app host '"192.168.1.2"',避免Erlang把值解析为原子。

方法2:脚本预生成临时配置文件(适合复杂批量调整)

如果需要一次修改大量配置、或者配置值有动态计算逻辑,可以用脚本先生成临时配置文件再启动Erlang:

  • 实现步骤:
  1. 先制作sys.config.template模板文件,把需要动态替换的部分用占位符标注,比如:
[{my_app, [{listen_port, {{CUSTOM_PORT}}}, {db_host, "{{DB_HOST}}"}]}].
  1. 写启动脚本(以shell脚本为例),接收传入的参数替换占位符后生成临时配置:
#!/bin/bash
# 接收传入的端口、数据库地址参数
CUSTOM_PORT=$1
DB_HOST=$2
# 替换模板生成临时配置文件
sed -e "s/{{CUSTOM_PORT}}/$CUSTOM_PORT/g" -e "s/{{DB_HOST}}/$DB_HOST/g" sys.config.template > /tmp/sys_runtime.config
# 启动Erlang,把剩余参数透传给erl命令
erl -config /tmp/sys_runtime.config "${@:3}"
# 启动完成后可选删除临时配置
rm /tmp/sys_runtime.config
  1. 启动时直接传参即可:./start.sh 9000 10.0.0.5 [其他Erl参数]

方法3:运行时动态修改配置

如果需要在Erlang运行过程中修改配置,可以直接调用OTP提供的接口:

  • 临时修改(重启后失效):执行application:set_env(MyApp, Key, NewValue)即可,改动会立即生效(具体生效逻辑要看应用有没有监听配置变更事件)
  • 持久化修改:可以自己实现配置写入逻辑,把修改后的配置全量写入sys.config文件,下次启动就会加载新配置。

内容的提问来源于stack exchange,提问作者KJ_kaka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 19:45:04