
方法一:编辑rc.loacl脚本
方法二:Linux通过chkconfig设置开机启动服务
创建脚本
编辑脚本内容如下(脚本前面三行格式固定)
说明:
第一行,告诉系统使用的shell,所有的shell脚本都是这样。
第二行,chkconfig后面有三个参数2345,100和101告诉chkconfig程序,需要在rc2.d~rc5.d目录下,创建名字为 S100bootshell的文件连接,连接到/etc/rc.d/init.d目录下的的test2脚本。第一个字符是S,系统在启动的时候,运行脚本bootshell,就会添加一个start参数,告诉脚本,现在是启动模式。同时在rc0.d和rc6.d目录下,创建名字为K90bootshell的 文件连接,第一个字符为K,系统在关闭系统的时候,会运行bootshell,添加一个stop,告诉脚本,现在是关闭模式。 注意上面的三行中,第二,第三行是必须的,否则在运行chkconfig --add bootshell时,会报错。
运行级别,越小越优先运行,优先级相同的时候按创建时间启动。
给文件设置执行权限
测试脚本
chkconfig创建服务
此时rc2.d-rc5.d文件夹下已有创建好的文件。
在CentOS中服务启动脚本放置在: /etc/rc.d/init.d 而 /etc/init.d 这个目录为公认的目录,在centos中 /etc/init.d 就是一个链接档案 /etc/sysconfig 服务初始化环境变量配置都在这个档案中。
Linux Booting Process:(1) BIOS
功能:执行计算机系统完整性检测;通电自检;搜索/加载/执行 boot loader程序。
一旦 boot loader 程序被探测到,并且加载到内存,BIOS会把控制权交给它。
(2) MBR
MBR位于引导盘(Bootable Disk)的第一个扇区(512B)。
通常是在 /dev/sda 或者 /dev/hda 。
注意:引导盘(bootable disk)和引导分区(bootable partition)的区别。
(3) GRUB
GRUB = Grand Unified Bootloader
如果在系统中安装有多个内核镜像,你可以选择某一个被执行。
GRUB展示了一个启动画面,等待几秒,如果你不输入任何字符,它将会按照grub配置文件的规定加载默认的内核镜像。
Grub配置文件在: /boot/grub/grub.conf
它包含了内核和initrd.img
(4) Kernal
(注意Kernal和kernel不一样)
Kernal按照grub.conf文件的规定,挂载根文件系统。
一旦kernal启动,它第一件事情就是执行:sbin/init 进程。
initrd是被kernel用做临时根文件系统,直到Kernal挂载了根文件系统。
(5) INIT(Initilization)
根据 /etc/inittab 文件决定Linux运行层级,运行级别决定了哪个初始化程序(Initial Programs)被加载到启动项。
(6) Run Level
根据你的运行级别的设定, *** 作系统会执行下来对应的文件夹下的程序:
Linux的7个运行级别(Run levels):
标准的Linux运行级别为3或者5,如果是3的话,系统就在多用户状态;如果是5的话,则是运行着XWindow系统。不同的运行级别有着不同的用处,也应该根据自己的不同清晰来设置。例如,如果丢失了root口令,那么可以让机器启动进入单用户模式来设置。
如果是使用S(Start)开头的程序,那么是用在启动的时候,
如果是使用K(Kill)开头的程序,那么是用在关机的时候。
很多时候,我们需要将一些服务在Linux系统启动时即自动运行,省得每次都要去手动启动一遍,如Redis, MySQL, Nginx等。本文对CentOS与Ubuntu下开机自启动的配置方法进行整理,供参考查阅。
rc.local是CentOS以前版本的方式,在CentOS7中仍然以兼容的形式存在,虽仍可用,但不推荐(推荐使用systemd service)。
1、编写需要开机自启动的脚本,并添加执行权限
作为测试,上述脚本打印一个时间到/tmp/test.log文件中
2、在/etc/rc.d/rc.local配置文件中添加脚本运行命令(使用绝对路径)
3、添加/etc/rc.d/rc.local文件的执行权限
在centos7中,/etc/rc.d/rc.local没有执行权限,需要手动授权
以上三步,即可使/root/test_rclocal.sh >/dev/null 2>/dev/null 命令在服务器系统启动时自动运行。
1、编写需要开机自启动的测试脚本,并添加执行权限
2、在/etc/rc.d/init.d/目录下添加一个可执行脚本testchkconfig
上述testchkconfig脚本的头部必须遵循一定的格式 # chkconfig: 2345 90 10, 其中2345指定服务在哪些执行等级中开启或关闭,90表示启动的优先级(0-100,越大优先级越低),10表示关闭的优先级。执行等级包括
3、加入开机启动服务列表
使用 chkconfig --list 可查看当前加入开机自启动的服务列表,但如Note部分所述,该命令只显示SysV服务,不包含原生的systemd服务,查看systemd服务可使用systemctl list-unit-files命令。
以上三步,即可使/root/test_chkconfig.sh >/dev/null 2>/dev/null 命令在服务器系统启动时自动运行。
chkconfig的其它命令参考
CentOS7的systemd服务脚本存放在:/usr/lib/systemd/system(系统级)/usr/lib/systemd/user(用户级)下,以.service结尾。这里以nginx为例
1、在/usr/lib/systemd/system目录下创建nginx.service文件
其中Service部分的Type包括如下几种类型:
2、 开启开机自启动
以上两步,就将nginx服务配置成了在 *** 作系统启动时自动启动。
其它命令参考
从字面看是PID文件不可读,查看/var/run/nginx.pid,该文件也确实不存在,查看nginx.conf配置文件,发现是pid /var/run/nginx.pid这行配置被注释掉了, 如果不指定pid文件位置,nginx默认会把pid文件保存在logs目录中。所以出现systemd启动服务时找不到pid文件而报错,将nginx.conf中的pid配置注释去掉,重启nginx.service即可。
在Ubuntu18.04中,主要也是以systemd服务来实现开机自启动,systemd默认读取/etc/systemd/system/下的配置文件,该目录下的一些文件会链接到/lib/systemd/system/下的文件。
因此可以在/etc/systemd/system/目录下面创建一个自启动服务配置,以内网穿透服务frp客户端为例,如
各配置项与CentOS类似。然后将服务器加到自启动列表中并启动服务
其它更多systemctl命令与CentOS类似。
也可以使用/lib/systemd/system/rc-local.service来执行一些开机需要执行的脚本,该文件内容为
从Description看它是为了兼容之前版本的/etc/rc.local的,该服务启动命名就是/etc/rc.local start,将该文件链接到/etc/systemd/system下
创建/etc/rc.local文件,并赋予可执行权限
作者:半路雨歌
链接:https://juejin.cn/post/6844904104515338248
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)