守护进程和inetd超级服务器
一、概述
守护进程是在后台运行且不与任何控制终端关联的进程。Unix系统通常由很多守护进程在后台运行(约在20到50个的量级),执行不同的管理任务。
守护进程启动方法:
-
由系统初始化脚本启动,通常位于
/etc/rc或/etc
目录下,由这些脚本启动的守护进程一开始拥有超级用户特权。 -
许多网络服务器由inetd超级服务器启动。
-
cron守护进程定期执行一些程序,由它执行的程序同样作为守护进程运行。
-
at命令指定将来某个时刻的程序执行。当这些程序的执行时间到了由cron来启动。
-
可以从用户终端前台和后台启动。
由于守护进程没有控制终端,通常使用syslog函数来输出消息,并通过syslogd守护进程接收消息。
二、syslogd守护进程
syslogd
守护进程由某个系统初始化脚本启动,并且在系统工作期间一直运行。可以在终端输入ps -aux | grep syslog
查看。当syslog守护进程启动时一般执行下列步骤:
-
读取配置:通常为
/etc/syslog.conf
指定syslogd
守护进程可能接收到的各种日志消息和怎样处理。当这些消息被添加到/dev/console
中时,则消息打印到控制台。 -
创建Unix域套接字,捆绑路径名
/var/run/log(或者/dev/log)
。 -
创建udp套接字,端口号为514,通过命令
cat /etc/services | grep "syslog"
查看。 -
打开路径名
/dev/klog
。内核的错误消息看着像是这个设备的输入。 -
监听:调用select,监听上面几个步骤。(收到信息,读入并安装配置进行处理;收到SIGHUP信号,重新配置文件)。
-
注:新的syslogd实现禁止创建UDP套接字,会造到Dos攻击。
三、syslog函数
守护进程没有控制终端,因此我们不能把消息fprintf
到stderr
上,那么就可以使用syslog
函数:
#include<syslog.h>
void syslong(int priority,const char *message,...);
//priority:级别(level):默认:LOG_NOTICE,和设施(facility):默认:LOG_USER,两者的组合,如下两图所示。
rename函数调用意外失败时,守护进程可以执行以下调用:
syslog(LOG_IOFO|LOG_LOCAL2,"rename(%s,%s):%m",file1,fil);
//facitily和level:允许/etc/syslog.conf文件统一配置来自同一给定设施的所有信息,或者统一配置具有相同级别的所有消息。
//例:该配置文件可能含有以下两行:
kern.* /dev/debug //内核的所有消息发送控制台
loca17.debug /var/log/cisco.log //来自loca17的所有消息添加到文件cisco.log的尾部
当syslog被应用进程首次调用时,会创建一个Unix域数据报套接字,然后调用connect连接由syslogd守护进程创建的Unix域数据报套接字的路径名(/var/run/log)。这个套接字一直保持打开,直到进程终止为止。进程也可以调用openlog和closelog
。
//openlog可以在首次调用syslog前调用,closelog可以在应用进程不再需要发送日志消息时调用。
#include<syslog.h>
void openlog(const char *ident,int options,int facility);
//ident:日志前缀,通常为程序名
//options:如下图所示
//facility:设置默认的打印设施的值
void closelog(void);
int setlogmask(int maskpri);
//为当前的进程设置这个日志掩码,并返回先前的掩码。如果掩码参数为0,那么当前的日志掩码不会被修改。
-
openlog
被调用时,通常并不立即创建Unix域套接字。相反,该套接字直到首次调用syslog
时才打开。 -
LOG_NDELAY
选项迫使该套接字在openlog
被调用时就创建。 -
openlog
的facility
参数为没有指定设施的后续syslog
调用指定一个默认值。 -
有些守护进程通过调用
openlog
指定一个设施 (对于一个给定守护进程,设施通常不变),然后在每次调用syslog
时只指定级别(因为级别可随错误性质改变)。 -
日志消息也可以由
logger
命令产生。例:logger
命令可用在shell脚本中以向syslogd
发送消息。
四、daemon_init函数
将一个普通进程转变为守护进程。(daemon的C库函数,实现类似功能)。