rsyslog & xinetd 服务的使用方法和配置

rsyslog

rsyslogd是提供rsyslog服务的守护进程,rsyslog服务的功能是提供日志的记录,通常被守护进程记录进程运行时的消息输出,包括出错消息,调试消息,因为守护进程所在的会话没有控制终端,不能通过printf等打印出来,rsyslogd的配置文件包括/etc/rsyslog.conf和文件夹/etc/rsyslog.d/中的所有文件。

消息可由等级(level)和设备(facility)分类,比如level的等级:LOG_INFO(通告消息)为6,LOG_DEBUG(调试消息)为7,值越低优先级越高,(这个优先级的作用我尚不明确)。facility:LOG_USER(任意的用户级消息)(默认),LOG_SYSLOG(由syslogd内部产生的消息)
在/etc/rsyslog.conf和/etc/rsyslog.d/文件夹中,配置文件中的每一行的形式为以下几种之一:
<facilityname>.<levelname> <destination>
*.<levelname> <destination>
<facilityname>.* <destination>
*.* <destination>
<destination>可以为文件或其他rsyslogd服务器的ip
比如:
kern.* /dev/console
local7.debug /var/log/cisco.log


产生日志的方法
1.使用loger命令
2.使用syslog(int priority, const char *message, ...);
priority有level和facility用过或运算符|构成


与syslog函数相关的函数还有:
void openlog(const char *ident, int options, int facility);
ident指定了消息的前缀,options可由LOG_CONS,LOG_NDELAY,LOG_PERROR,LOG_PID逻辑或构成,这个函数在调用syslog之前调用,功能是指定消息的前缀,设备和选项
void closelog(void);//这个在不需要syslog是调用,用来关闭log连接




xinetd
功能:完成tcp udp等服务器端的套接字的建立和监听端口,简化服务器程序的开发,减少进程的创建


也就是说,在我们的服务器程序中socket,bind,listen,accept函数不需要我们自己写,我们只要把要创建的服务的信息写入xinetd的配置文件/etc/xinetd.conf或/etc/xinetd.d/中的文件就能够委托xinetd帮我们完成这些函数的调用。xientd守护进程帮我们accept到一个连接或者对于udp端口检测到可读后(使用select函数等待可读),就会fork一个进程,exec到我们的服务器程序。通过这种方式,我们只需要一个xinetd守护进程,当一个连接产生时再fork一个进程,比起传统的服务器程序各自遇到有连接时fork一个进程,能够产生更少的进程。同时因为创建监听端口一系列的设置不需要我们编写代码,只需要设置配置文件就行了,自然简化的服务器程序的编写,让服务器程序专注与处理客户的请求




xinetd的配置
xinetd的配置文件/etc/xinetd.conf主要是为各个服务设置默认的配置,要注意开头的'#'号表示这一行是注释。/etc/xinetd.d/文件夹中的各个文件是针对具体的单个服务配置的,这是xinetd与inetd相比更模块化的表现。该文件夹下配置文件的形式为:
service <serviceName>
{
  <attributeName> = <value>
  ...
  ...
}
其中serviceName为服务的名字,一般设置为在/etc/services中可以找到的服务,{}中是对该服务的属性的设值,一些属性如果可以是一个集合,还可以使用+= -= 这样的操纵符(但有些不能使用-=)。下面介绍几个主要的属性:
disable 如果要开启服务应该设为no
id 服务的唯一标识符,一般与serviceName同名
type 如果本服务是xinetd的内置服务(可能xinetd实现了某些服务器程序的功能),比如说echo服务,本 值就应设为INTERNAL,如果本服务没有在/etc/services中列出,就应设为UNLISTED,如果是一个RPC服 务,就应设为RPC


flags 一些套接字的选项,比如NODELAY,KEEPALIVE
wait 当子进程未结束时新的请求到来,是否等待子进程结束后再fork新子进程,udp一般为yes,tcp为no
socket_type tcp设为stream, udp设为dgram
server 服务器程序路径名
user 启动server的用户,因为xinetd进程以值为0的用户启动,所以可以fork的进程可以改变用户




xinetd的调试
当我们写了一个服务在/etc/xinetd.d文件夹中,但是重启xinetd服务后netstat -ano | grep <端口号>又查不到我们服务的端口,就是出了错误了,我们需要知道哪里出了错。方法是查看日志文件,当日志文件在哪真是个问题,我设置的服务配置文件中的log_type,log_on_success log_on failure选项,然后service xinetd restart重启xinetd服务,但是去查看log_type中设的文件竟是空的。最后只能在rsyslog服务的配置文件/etc/rsyslog.conf中加上一行:*.* ,然后重启xinetd终于可以了,当这个方法实在太笨,最后通过man xinetd发现xinetd -filelog 可以指定日志文件而且有效,还是要看英文文档啊!虽然有点反感英文
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值