我正在 Linux 上编写一个应用程序,它需要我捕获系统事件,例如:
- 系统重启
- 用户“xyz”登录
- “xyz”应用程序崩溃等。
并需要基于此执行一些功能。例如:
- 运行备份脚本
- 运行恢复程序等。
谁能告诉我如何在 C/Linux 中捕获系统事件?
PS:我不是在这里谈论“文件系统”事件:P
没有“系统事件”的概念。您需要指定需要处理的事件并实施适当的机制来处理每个事件:
系统启动:init
进程在启动期间调用脚本/etc/init.d
。确切的基础架构在发行版之间略有不同,但Linux 标准基础 系统初始化通常应该适用于所有发行版。
用户登录/注销:LSB 还定义了Pluggable Authentication Modules库的接口。您可以实现将在登录期间调用的共享库(以及其他需要身份验证和授权的操作)。根据您想要做什么,可能已经有一个适合您的模块,因此请先尝试寻找它。在任何一种情况下,我都不认为有独立于发行版的安装方式,即使在给定的发行版上,您也必须考虑管理员可能进行了自定义修改,因此安装需要管理员手动干预。
应用程序崩溃:您必须对其进行检测。
我认为您应该考虑阅读系统日志-您询问的所有内容都记录到系统日志中(用于标准配置)。如果您的系统使用 syslog-ng,那么您甚至可以将其配置为直接写入您的程序,有关详细信息,请参阅http://www.syslog.org/syslog-ng/v2/#id2536904。但即使使用任何其他 syslog 守护程序,您也始终可以从 /var/log 读取文件(或多个文件),就像tail -f
对特定消息做出反应一样。
我不确定捕获应用程序崩溃 - 有一个内核选项可以记录用户进程中的每个 SIGSEGV,但 AFAIK 它仅在 ARM 架构上可用 - 最后的手段是检测你的应用程序(正如 Jan Hudec 指出的那样)记录一些东西到系统日志。