查看源代码 os_sup (os_mon v2.10.1)
操作系统系统消息接口
os_sup
是一个进程,提供从操作系统到 Erlang 运行时系统中的错误日志记录器的消息传递服务。 它是 OS_Mon 应用程序的一部分,请参阅 os_mon。 可用于 Solaris 和 Windows。
从操作系统接收到的消息会导致调用用户定义的回调函数。 该函数可以执行任何必要的过滤和格式化,然后部署任何适合用户应用程序的日志记录类型。
Solaris 操作
Solaris (SunOS 5.x) 消息是从系统日志守护进程 syslogd
中检索的。
启用该服务包括需要 root 权限的操作,例如更改可执行二进制文件的所有权和文件权限,以及为 syslogd
创建配置文件的修改副本。 当 os_sup
终止时,必须禁用该服务,这意味着必须恢复原始配置。 启用/禁用可以在 os_sup
内部或外部完成。 请参阅下面的 配置。
警告
此进程不能在同一硬件上运行多个实例。 如果在同一台机器上执行两个或多个 Erlang 节点,则必须配置 OS_Mon 以仅在一个节点上启动
os_sup
。
接收到的事件格式未定义。
Windows 操作
Windows 消息是从事件日志文件中检索的。
nteventlog
模块用于实现 os_sup
。 请参阅 nteventlog
。 请注意,nteventlog
的启动函数不需要使用,因为在这种情况下,该进程会自动作为 OS_Mon 监控树的一部分启动。
操作系统消息的格式为元组 {Time, Category, Facility, Severity, Message}
Time = {MegaSecs, Secs, MicroSecs}
- 由 BIFnow/0
返回的时间戳。Category = string()
- 通常为"System"
、"Application"
或"Security"
之一。 请注意,NT 事件日志查看器对类别有另一种概念,在大多数情况下,该概念完全没有意义,因此不会导入到 Erlang 中。 这里所称的类别是普通 NT 系统中发生的三种主要事件类型之一。Facility = string()
- 消息的来源,通常是生成该消息的应用程序的名称。 这几乎可以是任何字符串。 当匹配来自某些应用程序的消息时,可能必须考虑应用程序的版本号。 这就是 NT 事件查看器所称的“源”。Severity = string()
-"Error"
、"Warning"
、"Informational"
、"Audit_Success"
、"Audit_Faulure"
之一,或者在当前未知的 Windows NT 版本的情况下,为"Severity_Unknown"
。Message = string()
- 格式与 NT 事件日志查看器中的格式完全相同。 二进制数据不会导入到 Erlang 中。
配置
os_sup_mfa = {Module, Function, Args}
- 要使用的回调函数。Module
和Function
是原子,Args
是术语列表。 当收到操作系统消息Msg
时,此函数会以apply(Module, Function, [Msg | Args])
的方式调用。默认值为
{os_sup, error_report, [Tag]}
,它将使用 error_logger:error_report(Tag, Msg) 将事件发送到错误日志记录器。Tag
是os_sup_errortag
的值,请参阅下文。os_sup_errortag = atom()
- 此参数定义了在使用默认回调函数将消息发送到错误日志记录器时使用的错误报告类型。 默认值为std_error
,这意味着事件由标准事件处理程序处理。os_sup_enable = bool()
- 仅限 Solaris。 定义服务是否应在os_sup
内部 (true
) 或外部 (false
) 启用(和禁用)。 出于向后兼容的原因,默认值为true
。 建议值为false
,因为 Erlang 模拟器通常不应在需要启用该服务的root
权限下运行。os_sup_own = string()
- 仅限 Solaris。 定义包含syslogd
的备份副本和 Erlang 特定配置文件的目录,以及从syslogd
接收消息的命名管道。 默认值为"/etc"
。os_sup_syslogconf = string()
- 仅限 Solaris。 定义syslogd
的配置文件的完整名称。 默认值为"/etc/syslog.conf"
。
另请参阅
Solaris 文档中的 syslogd(1M)
, syslog.conf(4)
。
摘要
函数
-spec disable() -> ok | {error, Res} when Res :: string().
-spec disable(Dir, Conf) -> ok | {error, Res} when Dir :: string(), Conf :: string(), Res :: string().
禁用 os_sup
服务。 仅在 Solaris 上需要。
如果配置参数 os_sup_enable
为 false
,则此函数将由 os_sup
自动调用,使用与调用 enable/2
时相同的参数。
如果 os_sup_enable
为 true
,则必须在停止 OS_Mon/os_sup
之后 调用此函数。Dir
定义包含 syslogd
的备份副本和 Erlang 特定配置文件的目录,以及从 syslogd
接收消息的命名管道。 默认为 "/etc"
。Conf
定义 syslogd
的配置文件的完整名称。 默认值为 "/etc/syslog.conf"
。
导致对操作系统进行调用
<PRIVDIR>/bin/mod_syslog nootp Dir Conf
其中 <PRIVDIR>
是 OS_Mon 的 priv
目录,即 code:priv_dir(os_mon)
。
如果这产生了预期结果 "0"
,则返回 ok
,如果产生了其他任何结果,则返回 {error, Res}
。
注意
此函数需要 root 权限才能成功。
-spec enable() -> ok | {error, Res} when Res :: string().
-spec enable(Dir, Conf) -> ok | {error, Res} when Dir :: string(), Conf :: string(), Res :: string().
启用 os_sup
服务。 仅在 Solaris 上需要。
如果配置参数 os_sup_enable
为 false
,则此函数将由 os_sup
自动调用,使用 os_sup_own
和 os_sup_syslogconf
的值作为参数。
如果 os_sup_enable
为 true
,则必须在启动 OS_Mon/os_sup
之前 调用此函数。Dir
定义包含 syslogd
的备份副本和 Erlang 特定配置文件的目录,以及从 syslogd
接收消息的命名管道。 默认为 "/etc"
。Conf
定义 syslogd
的配置文件的完整名称。 默认值为 "/etc/syslog.conf"
。
导致对操作系统进行调用
<PRIVDIR>/bin/mod_syslog otp Dir Conf
其中 <PRIVDIR>
是 OS_Mon 的 priv
目录,即 code:priv_dir(os_mon)
。
如果这产生了预期结果 "0"
,则返回 ok
,如果产生了其他任何结果,则返回 {error, Res}
。
注意
此函数需要 root 权限才能成功。