首页 > 代码库 > Upstart事件驱动的任务和服务引导方法简述

Upstart事件驱动的任务和服务引导方法简述

/*********************************************************************
 * Author  : Samson
 * Date    : 04/30/2014
 * Test platform:
 *              3.11.0-12-generic #19-Ubuntu
 *              GNU bash, version 4.2.45
 * *******************************************************************/

Upstart是一个基于事件的替代在引导过程中处理任务和服务的启动、停止、监督整个系统运行的/sbin/init守护进程的一个程序。


在Unix和Linux系统上的“初始化”或“系统初始化”过程中有进程ID(PID)为“1”。也就是说,它是启动在系统引导时(忽略的initrd/ initramfs)装载的第一道工序。根据官方说法,Upstart是一个替代传统的Unix的“System V”的“init”制度的“INIT”。Upstart提供与传统的“初始化”系统相同的功能,但超越了原有的许多方面。

若是采用了Upstart方式的系统在启动时,会去执行/etc/init/下的众多.conf文件,这此文件中包含的即是服务或任务的执行方式,这些文件中就使用了基于Upstart事件的方法,例如ssh.conf,这是启动ssh服务的Upstart事件的配置文件;具体说明如下:

# ssh - OpenBSD Secure Shell server
#
# The OpenSSH server provides secure shell access to the system.

description    "OpenSSH server"

#表示在登录界面执行的时候进行此服务(sshd)的启动
start on desktop-session-start
#下面这句的意义是当系统在2、3、4、5这四种启动模式下或文件系统事件信号的情况下
#start on filesystem or runlevel [2345]
stop on runlevel [!2345]
#当服务或程序为停止状态时,为了让服务有持续性,则需要进行重启此服务
respawn
#重生极限计数间隔|无限
#Syntax:
#respawn limit COUNT INTERVAL | unlimited
#以下语句的意义为:重启的最大次数为10次 每次间隔5秒
respawn limit 10 5
umask 022

# ‘sshd -D‘ leaks stderr and confuses things in conjunction with ‘console log‘
console none
#pre-start:
#Syntax:
#pre-start exec|script
#在进行任务之前进行预处理的块
#以下是判断sshd是否可执行 文件sshd_not_to_be_run是否存在等
pre-start script
    test -x /usr/sbin/sshd || { stop; exit 0; }
    test -e /etc/ssh/sshd_not_to_be_run && { stop; exit 0; }
    test -c /dev/null || { stop; exit 0; }
    #可以在这里打印执行的时间;
    echo "`date` is start." > /home/wbc/sshdatatime.log
    #修改sshd的权限
    mkdir -p -m0755 /var/run/sshd
end script

# if you used to set SSHD_OPTS in /etc/default/ssh, you can change the
# ‘exec‘ line here instead
exec /usr/sbin/sshd -D

Upstart参考:
http://upstart.ubuntu.com/cookbook/#what-is-upstart


在重新启动系统后,服务启动的时间是启动了登录界面后的时间,而不是系统一启动就进行启动服务;