守护进程的出错处理

本文介绍了Linux中守护进程如何利用syslog服务进行错误信息记录。包括openlog、syslog及closelog函数的使用方法,以及如何配置消息优先级和日志类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

守护进程的出错处理

由于守护进程完全脱离了控制终端,因此,不能像其他程序一样通过输出错误信息到控制台的方式来通知程序员。

通常的办法是使用 syslog 服务,将出错信息输入到 “/var/log/message” 系统日志文件中去。

Syslog linux 中的系统日志管理服务通过守护进程 syslog 来维护。

syslog 函数说明

Openlog 函数用于打开系统日志服务的一个连接;

Syslog 函数用于向日志文件中写入消息,在这里可以规定消息的优先级、消息的输出格式等;

Closelog 函数用于关闭系统日志服务的连接。

 

syslog 函数格式

1 openlog 函数

#include <syslog.h>

void openlog(char * ident , int option ,                                int facility ) ;

Ident 要向每个消息加入的字符串,通常为程序的名称;

option 参数:

n  LOG_CONS 若日志消息不能通过发送至 syslogd ,则将该消息写至控制台;

n  LOG_NDELAY 立即打开 UNIX 域数据报套接口至 syslsgd 守护进程。通常,在记录第一条消息之前,该套接口不打开。

n  LOG_PERROR :除将日志消息发送给 syslog 外,还将它写至标准出错( stderr )。

n  LOG_PID :每条消息都包含进程 ID ,此选择项可供对每个请求都 fork 一个子进程的守护进程使用。

openlog facility 参数

n  LOG_AUTH 授权程序 : login.su,getty,

n  LOG_CRONcron at

n  LOG_DAEMON 系统守护进程: ftpd,routed,

n  LOG_KERN 内核产生的消息

n  LOG_LOCAL0 保留由本地使用

n  LOG_LPR 行打系统: lpd, lpc,

n  LOG_MAIL 邮件系统

n  LOG_NEWSU senet 网络新闻系统

n  LOG_SYSLOG syslogd 守护进程本身

n  LOG_USER 来自其他用户进程的消息

n  LOG_UUCP UUCP 系统

syslog 函数

include <syslog.h>

void syslog(int priority , char *format , ...);

Priority 选项(消息优先级)

n  LOG_EMERG 紧急 ( 系统不可使用 ) ( 最高优先级 )

n  LOG_ALERT 必须立即修复的条件

n  LOG_CRIT 临界条件 ( 例如,硬设备出错 )

n  LOG_ERR 出错条件

n  LOG_WARNING 警告条件

n  LOG_NOTICE 正常,但重要的条件

n  LOG_INFO 信息性消息

n  LOG_DEBUG 调试排错消息 ( 最低优先级 )

closelog 函数

#include <syslog.h>

void closelog(void);

守护进程日志系统见例: syslog_dema.c

zz:http://blog.youkuaiyun.com/zccst/archive/2009/11/19/4836817.aspx

### 解决设置审计守护进程 PID 时出错的问题 当尝试设置或获取审计守护进程的 PID 时,可能会遇到错误。这通常与审计子系统的状态、守护进程是否运行以及系统配置有关。以下是对该问题的专业分析和解决方法: #### 1. 检查审计子系统的状态 使用 `auditctl` 的 `-s` 参数可以报告内核审计子系统的状态。此命令会显示包括 `pid` 在内的多个关键字段。如果 `pid` 值为 `0`,则表示审计守护进程未运行[^1]。此时需要启动审计守护进程。 ```bash auditctl -s ``` #### 2. 启动审计守护进程 如果审计守护进程未运行,可以通过以下命令启动它。确保系统中已安装并配置了 `auditd` 服务。 ```bash systemctl start auditd ``` 启动后,再次检查审计子系统的状态以确认 `pid` 是否已正确设置。 #### 3. 验证审计规则配置 审计规则可能影响守护进程的行为。使用 `auditctl -l` 列出所有当前规则,并检查是否存在冲突或错误配置的规则。如果有问题,可以删除或修改相关规则。 ```bash auditctl -l ``` 例如,若需根据特定键列出规则,可以使用 `-k` 参数。 ```bash auditctl -l -k specific_key ``` #### 4. 检查系统日志 查看系统日志文件(如 `/var/log/audit/audit.log` 或 `/var/log/messages`),寻找与审计守护进程相关的错误信息。这些日志可能提供关于 PID 设置失败的具体原因。 ```bash tail -f /var/log/audit/audit.log ``` #### 5. 确保权限充足 只有具有 `CAP_AUDIT_WRITE` 能力的用户(通常是 root 用户)才能与审计系统交互。如果非特权用户尝试设置或读取 PID,可能会导致权限不足的错误。 #### 6. 检查内核参数 某些内核参数可能影响审计子系统的正常运行。例如,`-e` 和 `-f` 参数控制审计功能的启用状态和行为模式。通过以下命令检查和调整这些参数: ```bash auditctl -e 1 # 启用审计功能 auditctl -f 1 # 设置失败模式为通知而非挂起 ``` #### 7. 标准输入输出重定向 如果审计守护进程在后台运行,建议将标准输入、输出和错误重定向至 `/dev/null`,以避免无用的日志输出干扰系统[^4]。这可以通过脚本实现: ```c void SetStdioToDevNull(char** argv) { freopen("/dev/null", "r", stdin); freopen("/dev/null", "w", stdout); freopen("/dev/null", "w", stderr); } ``` #### 8. 确认网络配置 如果问题涉及虚拟化环境(如 libvirt),请检查默认 NAT 网络配置是否正确。例如,`default.xml` 文件中的 `<bridge>` 和 `<ip>` 配置可能影响审计守护进程网络通信[^5]。 ```xml <ip address='192.168.122.1' netmask='255.255.255.0'> <dhcp> <range start='192.168.122.2' end='192.168.122.254'/> </dhcp> </ip> ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值