Init.d 命令及 Linux 启动
Linux 引导教程
-
内核的引导
当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。 操作系统接管硬件以后,首先读入 /boot 目录下的内核文件。
-
运行 init,运行第一个程序 /sbin/initv
-
init 进程是系统所有进程的起点,你可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都不会启动。
-
init 程序首先是需要读取配置文件 /etc/inittab
-
许多程序需要开机启动。在Linux就叫做”守护进程”(daemon)。
-
init进程的一大任务,就是去运行这些开机启动的程序。
-
Linux允许为不同的场合,分配不同的开机启动程序,这就叫做”运行级别”(runlevel)。根据”运行级别”,确定要运行哪些程序。
-
Linux系统有7个运行级别(runlevel):
命令 说明 运行级别0 系统停机状态,系统默认运行级别不能设为0,否则不能正常启动 运行级别1 单用户工作状态,root权限,用于系统维护,禁止远程登录 运行级别2 多用户状态(没有NFS) 运行级别3 完全的多用户状态(有NFS),登录后进入控制台命令行模式 运行级别4 系统未使用,保留 运行级别5 X11控制台,登录后进入图形GUI模式 运行级别6 系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动 -
-
系统初始化 在init的配置文件中有这么一行: si::sysinit:/etc/rc.d/rc.sysinit 它调用执行了/etc/rc.d/rc.sysinit,而rc.sysinit是一个bash shell的脚本,它主要是完成一些系统初始化的工作,rc.sysinit是每一个运行级别都要首先运行的重要脚本。
它主要完成的工作有:激活交换分区,检查磁盘,加载硬件模块以及其它一些需要优先执行任务。
-
建立终端
-
用户登录系统
Init.d 命令
-
我们所有的服务,都是存放在 /etc/init.d 这个目录下。
-
通过 service 命令,就能实现对 /etc/init.d 里面所有程序进行状态管理。
命令 | 说明 |
---|---|
service nginx status | 服务的状态 |
service nginx start | 启动服务 |
service nginx stop | 暂停服务 |
service nginx restart | 重启服务 |
- /etc/rc.local 这是一个开机之后会执行的初始化文件,它非常的好用。如果你有什么程序、脚本,想要让它 开机之后自动启动,那么只需要把想要执行的命令写入到这个文件中。
开机自启动脚本
-
方法1
-
新建个脚本文件a.sh
#!/bin/bash date >> /home/alvin/output.txt hostname >> /home/alvin/output.txt
-
退出后,再赋予可执行权限
chmod +x a.sh
-
把脚本添加到 /etc/rc.d/rc.local 文件最后一行
vim /etc/rc.d/rc.local /home/alvin/a.sh
-
直接重启就可以试试效果了。
-
-
方法2,使用 crontab
crontab 是 Linux 下的计划任务,当达到设定的时间,自动触发脚本的运行。 编写计划任务时间对应的脚本。@reboot ,这个任务就是在系统重启之后自动运行某个脚本。我们可以通过 crontab -e 来设置。
crontab -e @reboot /home/alvin/a.sh
-
方法3,使用 systemd 服务
- 运行
ps aux
命令,查看 pid 为 1 的进程是不是 systemd -
在 /etc/systemd/system 目录下创建 .service 文件,
vim auto_a.service [Unit] Description=Run a Custom Script at Startup After=default.target [Service] ExecStart=/home/alvin/a.sh [Install] WantedBy=default.target
-
完成后更新 systemd 配置文件,并启动服务
systemctl daemon-reload systemctl enable a.service systemctl status a.service
- 运行