首先了解 /etc/inittab脚本 (centos7的/etc/inittab已经没有用了)
- Linux 开机脚本启动顺序:
- 第一步:启动内核
- 第二步:执行init (配置文件/etc/inittab)
- 第三步:启动相应的脚本,执行inittab脚本,并且执行里面的脚本/etc/init.d rc.sysinit rc.d rc.local。。。
- 第四步:启动login登录界面 login
- 第五步:在用户登录的时候执行sh脚本的顺序:每次登录的时候都会完全执行的 /etc/profile /etc/bashrc /root/.bashrc /root/.bash_profile
/etc/rc.d/rc与/etc/rc.d/init.d的关系
在Linux中,/etc/init.d
Debian系 有/etc/init.d 目录,没有 /etc/rc.d/init.d这个目录。
需要说明的是:在CentOS和Ubuntu两个版本中,除了服务脚本放置的目录是相同的,服务脚本的编写及服务配置都是不同的。比如CentOS使用Chkconfig进行配置,而Ubuntu使用sysv-rc-conf进行配置。
Redhat系 /etc/rc.d/init.d 目录存放的是一些脚本,一般是Linux以rpm包安装时设定的一些服务的启动/关闭脚本。系统在安装时装了好多rpm包,这里面就有很多对应的脚本。执行这些脚本可以用来启动、停止、重启这些服务。
/etc/rc.d/init.d这个目录下的脚本就类似与windows中的注册表,在系统启动的时候执行。程序运行到这里(init进程读取了运行级别),运行init.d里的脚本了,但是并不是直接运行,而是有选择的,因为系统并不需要启动所有的服务。 根据运行级别决定。(系统启动的run level之后,先执行 /etc/rc.d/rc 这个脚本。在CentOS6.X的源码中它都是一上来就check_runlevel(),知道了运行级别之后,对于每一个运行级别,在rc.d下都有一个子目录分别是rc0.d,rc1.d ….. rc6.d。每个目录下都是到init.d目录的一部分脚本的一些链接。每个级别要执行哪些服务就在相对应的目录下,比如级别5要启动的服务就都放在 rc5.d下,但是放在这个rc5.d下的都是一些链接文件,链接到init.d中相对应的文件,真正干活的是init.d里的脚本。)
在 /etc/rc.d/rc数字.d 这样的目录下,链接文件前面会带一个Kxx或者Sxx ,带K的表示停止(Kill)一个服务,S表示开启(Start)的意思 。K和S后面带的数字 分别给init.d下面的脚本传递了start和stop的参数。
例如:/etc/rc.d/init.d/network restart命令。原来传S时相当于执行了/etc/rc.d/init.d/xxx start这条命令,当然K就相当于/etc/rc.d/init.d/xxx stop了。
补充:也可以修改rc.local达到自启动的目的,但是rc.local是最后执行的自启动配置文件。
方法一,
编辑 /etc/rc.d/rc.local文件
格式为 程序名 程序路径
例如 a.sh /home/a.sh
第二种方法
只需要将your_prog_name替换为你真正的脚本或执行文件的名称,将prog_path设置为具体的路径即可。
代码如下 | 复制代码 |
# vim /etc/init.d/your_prog_name #!/bin/bash ### Default variables # Check if requirements are met RETVAL=0 start(){ stop(){ restart() { case "$1" in exit $RETVAL |
service httpd start 其实是启动了存放在/etc/init.d目录下的脚本。
但是centos7的服务管理改规则了。
CentOS 7继承了RHEL 7的新的特性,例如强大的systemctl,
而systemctl的使用也使得以往系统服务的/etc/init.d的启动脚本的方式就此改变,
也大幅提高了系统服务的运行效率。但服务的配置和以往也发生了极大的不同,
说实在的,变的简单而易用了许多。
CentOS 7的服务systemctl脚本存放在:/usr/lib/systemd/,
有系统(system)和用户(user)之分,像需要开机不登陆就能运行的程序,
还是存在系统服务里吧,即:/usr/lib/systemd/system目录下
每一个服务以.service结尾,一般会分为3部分:[Unit]、[Service]和[Install]