查看源代码 run_erl
在 Unix 系统上重定向 Erlang 输入和输出流。
描述
run_erl
程序是 Unix 系统特有的。此程序重定向标准输入和标准输出流,以便所有输出都可以被记录。它还允许程序 to_erl
连接到 Erlang 控制台,从而可以远程监视和调试嵌入式系统。
有关使用的更多信息,请参阅系统文档中的 嵌入式系统用户指南。
run_erl [-daemon] pipe_dir/ log_dir "exec command arg1 arg2 ..."
参数
-daemon
- 强烈建议使用此选项。它使run_erl
在后台运行,完全与任何控制终端分离,并且命令立即返回给调用者。如果没有此选项,则必须在 shell 中使用一些技巧来启动run_erl
,才能使其完全与启动时使用的终端分离。该选项必须是命令行中run_erl
的第一个参数。pipe_dir
- 命名管道,通常为/tmp/
。它必须以/
(斜杠)结尾,即/tmp/epipes/
,而不是/tmp/epipes
。log_dir
- 日志文件,即一个日志文件,
run_erl.log
,记录run_erl
程序本身的进度和警告。最多五个日志文件,每个文件最大 100 KB,包含来自命令和发送到命令的标准流的内容。(日志的数量和大小都可以通过环境变量更改,请参阅下面的 环境变量 部分。)
当日志满了时,
run_erl
会删除并重用最旧的日志文件。
"exec command arg1 arg2 ..."
- 一个以空格分隔的字符串,指定要执行的程序。第二个字段通常是命令名,例如erl
。
关于日志文件的说明
运行时,run_erl
将所有未解释的输出发送到日志文件。该文件名为 erlang.log.N
,其中 N
是一个整数。当日志“满”时(默认日志大小为 100 KB),run_erl
开始在文件 erlang.log.(N+1)
中记录,直到 N
达到某个数字(默认为 5),然后 N
再次从 1 开始,最旧的文件开始被覆盖。
如果 Erlang shell 没有输出,但 Erlang 机器似乎仍然处于活动状态,则会向日志写入“ALIVE”消息;它是一个时间戳,默认情况下,在 15 分钟不活动后写入。此外,如果记录了 Erlang 的输出,但自从上次从 Erlang 收到任何信息以来已过去 5 分钟以上(默认),则会在日志中写入一个时间戳。“ALIVE”消息如下所示:
===== ALIVE <date-time-string>
另一个时间戳如下所示:
===== <date-time-string>
date-time-string
是写入消息的日期和时间,默认情况下为本地时间(如果需要,可以更改为 UTC)。它使用 ANSI-C 函数 strftime
和格式字符串 %a %b %e %T %Z %Y
进行格式化,该格式字符串生成类似 ===== ALIVE Thu May 15 10:13:36 MEST 2003
的消息;可以更改此设置,请参阅下一节。
环境变量
run_erl
可以识别以下环境变量,并更改日志记录行为。有关更多信息,请参阅上一节。
RUN_ERL_LOG_ALIVE_MINUTES
- 在向日志写入“ALIVE”消息之前等待输出的时间(以分钟为单位)。默认为 15,最小值为 1。RUN_ERL_LOG_ACTIVITY_MINUTES
- Erlang 需要不活动多长时间,输出之前才会加上时间戳。默认为RUN_ERL_LOG_ALIVE_MINUTES div 3
,最小值为 1。RUN_ERL_LOG_ALIVE_FORMAT
- 指定要在strftime
C 库调用中使用的另一个格式字符串。也就是说,将其指定为"%e-%b-%Y, %T %Z"
会生成时间戳类似于15-May-2003, 10:23:04 MET
的日志消息。有关更多信息,请参阅 C 库函数strftime
的文档。默认为"%a %b %e %T %Z %Y"
。RUN_ERL_LOG_ALIVE_IN_UTC
- 如果设置为除0
以外的任何值,则使run_erl
显示的所有时间都为 UTC(GMT、CET、MET,不包含夏令时),而不是本地时间。这不会影响来自 Erlang 的数据,只会影响run_erl
直接输出的日志。可以通过将 Erlang 应用程序变量utc_log
设置为true
来相应地修改应用程序 SASL。RUN_ERL_LOG_GENERATIONS
- 控制在重用旧文件之前写入的日志文件的数量。默认为 5,最小值为 2,最大值为 1000。请注意,为了指示最新文件,
run_erl
将删除最旧的日志文件,以在文件序列中保持一个“空洞”。例如,如果存在日志文件 #1、#2、#4 和 #5,则表示 #2 是最新的,#4 是最旧的。因此,您最多会获得比RUN_ERL_LOG_GENERATIONS
设置的值少一个的日志文件。RUN_ERL_LOG_MAXSIZE
- 在切换到新日志文件之前,日志文件的大小(以字节为单位)。默认为 100000,最小值为 1000,最大值约为 2^30。RUN_ERL_DISABLE_FLOWCNTRL
- 如果定义,则禁用run_erl
打开的 pty 的输入和输出流量控制。如果您想消除因使用 Ctrl-S(而不是 Ctrl-D 来分离)而意外阻止流量控制的任何风险,这将非常有用,这可能导致整个 Beam 进程被阻止,并且在运行 heart 作为 supervisor 的情况下,当向终端写入日志消息时,甚至 heart 进程也会被阻止,从而使 heart 进程无法工作。