一、概述
/etc/init.d目录下包含的脚本文件,在系统启动时或更改运行级别时由init进程执行。这些脚本文件以符号链接的形式放在/etc/rc?.d目录下。
在/etc/rc?.d目录下的符号链接文件的名字命名规则是:Smmscript
或者 Kmmscript 。
mm是两位数,script是脚本的名字,这个名字和其指向在init.d目录下真正的脚本名字一致。如/etc/rc2.d/S12starteb 对应的 /etc/init.d/starteb。
当init进程改变到一个运行级别n,rcn.d目录下的脚本就会被执行,首先,执行以K开头的脚本,脚本执行参数是stop,然后,执行以S开头的脚本,脚本执行参数是start,K表示杀死某项服务,而S代表开启某项服务。例如,我们从运行级别2切换到运行级别3,init进程就会首先执行rc3.d目录下所有以K开头的脚本,参数为stop,然后执行rc3.d目录下所有以S开头的脚本,参数为start。mm代表的两位数,用于决定执行这些脚本的顺序,数值越小,越先被执行。例如,K20脚本将会先于K30脚本执行。这被用于某些服务必须先于其他服务运行的情况。例如,bind服务必须先于inn服务运行,在这种情况下,bind的脚本数值就应该比inn服务的小,像这样:
/etc/rc2.d/S17bind
/etc/rc2.d/S70inn
有两个运行级别,0(halt)和6(reboot)有一些不同。在这两个运行级别中,以S开头的脚本仍然是在以K开头的脚本之后调用,但他们的参数全都是stop,而不是start。
二、书写脚本
系统启动或者更改运行级别时需要开启或者关闭的服务,其脚本应该放置在/etc/init.d目录下,这些脚本可以接收一个参数,这个参数可以是:
start 开启服务
stop 关闭服务
restart 如果服务在运行,关闭并重启服务;如果服务没有在运行,开启服务
reload 不关闭或重启服务,但使得服务的配置重新加载
force-reload 使得服务的配置重新加载如果服务支持的话,否则重启服务
init.d目录下的所有脚本都应该支持start,stop,restart,force-reload参数,而reload参数是可选的。init.d目录下的所有脚本必须保证足够健壮,比如当某个服务正在运行的时候,调用start,它应该能够正确返回而且不会产生多个该服务的拷贝,还有当某服务不在的时候调用stop也不会出错。在init.d目录下的脚本中应该小心使用set -e。书写正确的init.d脚本必须接受各种各样的错误退出状态。通用的init.d函数库对于调用set -e不够安全,因而在init.d脚本中,尽量避免使用set -e,取而代之,分开检测每条命令的结果。
三、脚本示例
/etc/rc2.d/S12starteb -> /etc/init.d/starteb
#!/bin/sh
NAME=startwpa.sh
PATH=$PATH:/usr/local/sbin
start_it_up()
{
#设备加电
echo 1 > /sys/power/iwifi
sleep 1
NETIF=""
DRIVER="ralink"
}
shut_it_down()
{
echo 0 > /sys/power/iwifi
}
reload_it()
{}
case "$1" in
start)
start_it_up
;;
stop)
shut_it_down
;;
status)
status_of_proc
;;
reload|force-reload)
reload_it
;;
restart)
shut_it_down
start_it_up
;;
*)
echo "Usage: /etc/init.d/$NAME {start|stop|reload|restart|force-reload|status}" >&2
exit 2
;;
esac
参考:http://www.debian.org/doc/debian-policy/#contents
9.3 System run levels and init.d
scripts
分享到:
相关推荐
本文包括3部分内容1、 Linux的引导过程2、 运行级别3、 /etc/rc.d/ 与/etc/rc.d/init.d的关系都仅限于自身的理解,如有差错和不足的地方请指正和补充!一起学习,一起进步。 “/etc/rc.d/init.d/目录下的脚本就类似...
Linux运行级别 init 0 1 2 3 4 5 6 Linux运行级别 0:系统停机状态,系统默认运行级别不能设置为0,否则不能正常启动,机器关闭。 1:单用户工作状态,root权限,用于系统维护,禁止远程登陆,就像Windows下的安全模式...
它接受5作为参数,去执行/etc/rc.d/rc5.d/目录下的所有的rc启动脚本,/etc/rc.d/rc5.d/目录中的这些启动脚本实际上都是一些链接文件,而不是真正的rc启动脚本,真正的rc启动脚本实际上都是放在/etc/rc.d/init.d/目录...
这7个目录中,每个目录分别存放着对应运行级别加载时需要关闭或启动的服务,由详细信息可以知道,其实每个脚本文件都对应着/etc/init.d/目录下具体的服务,K开头的脚本文件代表运行级别加载时需要关闭的,S开头的...
#当运行级别为3时,以3为参数运行/etc/rc.d/rc脚本,init将等待其返回 0:12345:respawn:/sbin/mingetty tty0 #在1-5各个级别上以tty0为参数执行/sbin/mingetty程序,打开tty0终端用于 #用户登录,如果进程退出则...
3.4 Configure脚本....................................................................................................................5 3.4.1 configure选项.................................................
6.2.2 /etc/inittab和系统状态 92 6.3 linuxconf与管理服务 96 6.4 关闭Linux系统 98 6.4.1 shutdown 98 6.4.2 halt与reboot 99 6.5 当系统崩溃时 100 6.5.1 以root身份运行 100 6.5.2 创建引导盘 100 6.5.3 误删除...
5)启动init进程,依据inittab文件设定运行级别 6)init进程,执行rc.sysinit文件。 7)启动内核模块,执行不同级别的脚本程序。 8)执行/etc/rc.d/rc.local 9)启动mingetty,进入系统登陆界面
ln -s 在/etc/rc.d/rc*.d目录中建立/etc/init.d/服务的软链接(*代表0~6七个运行级别之一) chkonfig 命令行运行级别设置 ntsysv 伪图形运行级别设置 注意:1.这三种方式主要用于以redhat为基础的发行版 2.如果...
确认系统中vsFTPd的安装和版本情况: [root@localhost ~]#rpm –q vsftpd 安装vsFTPd命令: [root@localhost Server]#rpm –ivh vsftpd-2.0.5-12.el5.i386.rpm 在vsftpd.conf文件中配置匿名访问: anonymous_...
ln -s 在/etc/rc.d/rc*.d目录中建立/etc/init.d/服务的软链接(*代表0~6七个运行级别之一) chkonfig 命令行运行级别设置 ntsysv 伪图形运行级别设置 注意: 1、这三种方式主要用于以redhat为...
运行级别目录 /etc/rc.d/rc.local 虚拟控制台 第四单元 用户管理 检查用户身份 添加用户 更改/删除用户 /etc/passwd文件 passwd文件详细 Home directory /etc/shadow shadow文件详细 组管理 组文件 强制位与冒险位 ...
-t:在改变到其它运行级别之前,告诉init程序多久以后关机。 -k:并不真正关机,只是送警告信号给每位登录者。 -h:关机后关闭电源。 -c:cancel current process取消目前正在执行的关机程序。所以这个选项...
5.6.1 文件/etc/rc.d/init.d/network 90 5.6.2 文件/etc/sysconfig/network 90 5.6.3 文件/etc/sysconfig/network-scripts/ifcfg-[dev_name] 91 5.6.4 文件/etc/resolv.conf 91 5.6.5 文件/etc/HOSTNAME 92 5.6.6 ...
2:再调用/etc/inittab确定系统默认运行级别 3:调用/etc/rc.d/rc文件 启动管理/启动引导程序grub 1:grub配置文件 2:grub加密与字符界面分辨率调整 启动管理/系统修复模式 1:单用户模式 2:光盘修复模式 3:...
Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。 与cgi的区别...
Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。 与cgi的区别...