您现在的位置是:首页 > 技术人生 > 服务器相关服务器相关

centos7 添加开机启动项

高晓波2020-06-18【服务器相关】人已围观

简介之前用dq77kb+蜗牛星际+E3 1265L组装了个server,同时用PVE(Proxmox VE)做虚拟化,好是好,但是没有配UPS,夏天到了,时不时来个停电,确实蛋疼,停电重启后,一大票服务需要手动去启动,很麻烦。

之前用dq77kb+蜗牛星际+E3 1265L组装了个server,同时用PVE(Proxmox VE)做虚拟化

制作pve引导盘---U盘安装Proxmox VE(一)

PVE添加新硬盘---U盘安装Proxmox VE(二)

PVE添加cpu温度显示---U盘安装Proxmox VE(三)

好是好,但是没有配UPS,夏天到了,时不时来个停电,确实蛋疼,真怕硬盘扛不住。

停电重启后,一大票服务需要手动去启动,很麻烦。
Centos7 如何添加开机启动项呢?
 

PLAN A:添加启动脚本至/etc/rc.d/rc.local

先说方法:
 

#1、赋权
chmod +x /etc/rc.d/rc.local

#2、/etc/rc.d/rc.local文末添加你自己的脚本路径
/opt/script/yourShell.sh #注意确保此脚本要有可执行权限


vi 打开/etc/rc.d/rc.local我们发现如下注释说明:
 

# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
啥意思呢?
1、这个自启动文件的存在仅仅是为了系统兼容性;
2、最好去创建自己的systemd services或者利用udev实现开机启动脚本;
3、此文件会在引导期间运行,所以不能保证此文件内的命令在其他服务之后运行;
4、如果真的要用此文件实现开机启动,必须给此文件赋与执行权限。

行吧?也是一种解决方案,但官方不建议使用此种方法。


PLAN B:通过chkconfig命令

先说方法:
1、编辑自己的脚本,脚本前添加注释:
#!/bin/bash
# chkconfig:   2345 90 10
# description:  my service

2、将自己的脚本移动到/etc/rc.d/init.d目录下
mv  /opt/script/myShell.sh /etc/rc.d/init.d

3、通过chkconfig命令将脚本添加到开机启动项中
cd /etc/rc.d/init.d
chkconfig --add myShell.sh
chkconfig myShell.sh on

上述第一步,自己脚本中添加的注释意义:
每个被chkconfig管理的服务需要在对应的init.d下的脚本加上两行或者更多行的注释。
第一行告诉chkconfig缺省启动的运行级、启动优先级、停止优先级。如果某服务缺省不在任何运行级启动,那么使用 - 代替运行级。
第二行对服务进行描述,可以用\ 跨行注释。

运行级解释:
      等级0表示:表示关机
      等级1表示:单用户模式
      等级2表示:无网络连接的多用户命令行模式
      等级3表示:有网络连接的多用户命令行模式
      等级4表示:不可用
      等级5表示:带图形界面的多用户模式
      等级6表示:重新启动

启动、停止优先级解释:
       优先级范围是0-100,数字越大,优先级越低。

 

PLAN C:创建自己的systemd services,也就是plan A中推荐的一中

1、在/usr/lib/systemd/system目录下创建自己的service文件,如:myShell.service,我们拿apache的httpd.service一起学习一下.service文件规范

/usr/lib/systemd/system/httpd.service
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
Documentation=man:httpd(8)
Documentation=man:apachectl(8)

[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
ExecStop=/bin/kill -WINCH ${MAINPID}
# We want systemd to give httpd some time to finish gracefully, but still want
# it to kill httpd after TimeoutStopSec if something went wrong during the
# graceful stop. Normally, Systemd sends SIGTERM signal right after the
# ExecStop, which would kill httpd. We are sending useless SIGCONT here to give
# httpd time to finish.
KillSignal=SIGCONT
PrivateTmp=true

[Install]
WantedBy=multi-user.target

[Unit]部分主要是对这个服务的说明,内容包括Description和After,Description 用于描述服务,After用于描述服务类别

[Service]部分是服务的关键,是服务的一些具体运行参数的设置.
 Type=forking是后台运行的形式,
 User=users是设置服务运行的用户,
 Group=users是设置服务运行的用户组,
 PIDFile为存放PID的文件路径,
 ExecStart为服务的具体运行命令,
 ExecReload为重启命令,
 ExecStop为停止命令,
 PrivateTmp=True表示给服务分配独立的临时空间
 注意:[Service]部分的启动、重启、停止命令全部要求使用绝对路径,使用相对路径则会报错!

 [Install]部分是服务安装的相关设置,可设置为多用户的

2、添加至开机启动项中
$ sudo systemctl enable myShell
 

参考资料:

《linux中chkconfig 启动程序顺序介绍》
《Linux下chkconfig命令详解》
《Centos7之Systemd(Service文件)详解》

Tags:centos   linux

很赞哦! ()

文章评论