服务(脚本)开机自启的几种方式
工作中正好要将某个脚本开机自启,百度了一下大概有几种方法:
- 将脚本放到 /etc/init.d/ 目录下,再在 /etc/rcN.d (N 表示 0~6 这7个数字,分别代表 linux 的七个运行级别)目录下创建脚本的软连接
- 将脚本放到 /etc/inid.d/ 目录下, 执行 chkconfig --add 脚本
- 编辑 /etc/rc.d/rc.local ,在 exit 0 之前添加执行相应脚本的语句
- crontab -e , 在定时任务中添加 @reboot 脚本名(全路径)
具体这几种方式有什么区别,有没有需要注意的地方?这两天查了些资料,现在做个总结!要比较这几种方式的优劣,还得从 linux 的开机流程说起
本文中我的系统版本是: CentOS release 6.10 (Final)
linux 开机流程
linux 的开机流程,大概如下
- 加载 BIOS 的硬件信息,并进行自我检测,并依据设定取得第一个可开机的装置(通常就是硬盘)
- 读取并执行装置内 MBR 的 boot loader (grub 等引导程序)
- 依据 boot loader 的设定加载核心 kernel, kernel 会开始侦测硬件并加载驱动程序
- 在硬件驱动成功后, 核心会主动呼叫 init 程序,而 init 会 根据设置的 run-level 信息(/etc/inittab 文件中定义了默认的运行级别)
- init 执行 /etc/rc.d/rc.sysinit 文档来准备软件执行的作业环境(例如网络,语系,时区等)
- 执行 /etc/rc.d/rc $RUNLEVEL # $RUNLEVEL为缺省的运行模式 根据 run-level执行对应目录rcN.d下的服务(N 表示运行级别,例如rc3.d目录下的服务就是全用户文本模式下要开启的服务)
- /etc/rc.d/rc.local #相应级别服务启动之后、在执行该文件(其实也可以把需要执行的命令写到该文件中)
- 执行终端仿真程序 mingetty 来启动 login 程序,等待用户登陆
前 3 步,主要是 linux 的核心加载,硬件检测之类的,偏硬件方面些。在核心加载完之后, linux 开始执行它的第一个程序 /sbin/init 了。 init 程序最主要的作用就是准备软件执行的环境,包括系统主机名,网络设定,语系设定,文件系统格式以及开机后的服务的启动等。 而所有的活动都会通过 init 的配置文件,也即 /etc/inittab 文件来 规划,而且 /etc/inittab 内还有一个很重要的设定:那就是确定系统的运行级别。
什么是运行级别呢? 说白了,linux是多用户的系统,它就是通过 run-level 来规定系使用不同的服务来启动,让linux的环境不同。具体分为 7 个级别
- 0 - halt (直接关机)
- 1 - Single user mode 单人维护模式
- 2 - Multiuser -without NFS 类似于下面的level 3 ,但是没有NFS服务(也