Centos开机自启的几种方式

阅读数:142 评论数:0

跳转到新版页面

分类

Linux

正文

预备知识:

0、在CentOS中,不建议再使用rc.local了,因此需要其它方法设置开机自启服务或脚本。

1、运行级别

Init进程是系统启动后运行的第一个用户进程,它会读取/etc/目录下的inittab文件中initdefault值,这个值称为运行级别,不同的运行级定义如下:

0 停机,不要把initdefault设置为0 ,否则无法开机
1 单用户模式
2 多用户,没NFS
3 完全多用户模式(标准运行级)
4 系统保留
5 x11(x window)
6 重启

2、/etc/rc.d/与/etc/rc.d/init.d的关系

/etc/rc.d/init.d这个目录下的脚本类似于windows中的注册表,在系统启动时候执行。rc.d目录都有子目录rc0.d、rc1.d……rc6.d,每个目录都是到init.d目录的一部分脚本链接,每个运行级别要执行的服务都在相对应目录下,比如级别5要启动的服务就放在rc5.d目录下,但放在这个rc5.d下的都是一些链接文件,链接到init.d中相对应的文件。

这些链接文件前面带K的表示停止一个服务,带S表示开启的意思,后面带的数字用来决定脚本执行的顺序,数值小的先执行,数值大的后执行。

方式一Init.d服务

service httpd start其实是启动了存放在/etc/init.d目录下的脚本。

但Centos7继承了RHEL7的新的特性,例如强大的systemctl,而systemctl的使用也使得以往系统服务的/etc/init.d的启动脚本的方式就此改变,也大幅提高了系统服务的运行效率。

Centos7的服务systemctl脚本存放在/usr/lib/systemd/,有系统(system)和用户(user)之分,像需要开机不登陆就能运行程序就存在系统服务里,即/usr/lib/systemd/system目录下,每一个服务以.service结尾,一般会分为3部分:[Unit]、[Service]和[Install]。

cd /etc/rc.d/init.d

vi nginx

#!/bin/sh
#
#chkconfig: 2345 80 90
#description: nginx

start() {
    /usr/local/nginx/sbin/nginx
}

reload() {
    /usr/local/nginx/sbin/nginx -s reload
}

stop() {
    /usr/local/nginx/sbin/nginx -s quit
}

case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    stop
    start
    ;;
  reload)
    reload
    ;;
  *)
echo $"Usage: $0 {start|stop|restart|reload}"
exit 1
esac

chmod +x nginx

service nginx start

service nginx stop

service nginx restart

service nginx reload

chkconfig --add nginx

chkconfig --list

方式二: systemctl服务

Centos7中采用了systemd控制系统服务,每一个Unit(服务)都有一个配置文件,告诉Systemd怎么启动这个Unit。Systemd默认从目录/etc/systemd/system/读取配置文件,但是里面存放在大部分文件都是符号链接,指向目录/usr/lib/systemd/system/,真正的配置文件存放在此目录里。systemctl enable命令用于在上面两个目录之间,建立符号链接关系。

$ sudo systemctl enable clamd@scan.service
# 等同于
$ sudo ln -s '/usr/lib/systemd/system/clamd@scan.service' '/etc/systemd/system/multi-user.target.wants/clamd@scan.service'

cd /usr/lib/systemd/system/

vi nginx.service

[Unit]
Description=nginx
After=syslog.target network.target
Wants=network.target
[Service]
Type=simple
ExecStart=/usr/local/nginx/sbin/nginx
Restart=always
RestartSec=1min
[Install]
WantedBy=multi-user.target

chmod +x nginx.service,最后重启下systemctl:systemctl daemon-reload

systemctl enable nginx.service

systemctl start nginx.service

systemctl stop nginx.service

service nginx start

service nginx stop

[Unit]部分  
设置参数 参数意义说明
Description 就是当我们使用systemctl list-units时,会输出给管理员看的简易说明!当然使用systemctl status也会输出此服务的说明。
Documentation

提供项目在提供管理员能够进一步的文件查询功能。Documentation=http://www.xx.xx

Documentation=man:sshd(8)

Documentation=file:/etc/ssh/sshd_config

After 说明此unit是在哪个daemon启动之后才启动的,但并没有强制要求一定要daemon启动后才启动此unit。
Before 与After相反,不过也仅是规范服务启动的顺序,并非强制要求。
Requires 明确的定义此unit需要在哪个daemon启动后才能够启动,如果在此项设置的前导服务没有启动,那么此unit就不会被启动。
Wants 与Requires相反,规范是这个unit之后最后还要启动什么服务比较好,主要的目的是希望创建让使用者比较好操作的环境,因此,这个Wants后面接的服务如果没有启动,其实不会影响到这个unit本身。
Conflicts 用于冲突性检查,如果后面接的服务启动的,这个unit就不能启动,如果这个unit启动了,则此项目后的服务就不能启动。

 

[Service]部分  
设置参数 参数说明
Type

说明这个daemon启动的方式,一般有下面几种类型:

(1)simple:默认值,这个daemon主要由ExecStart接的指令串来启动,启动后常驻于内存中。

(2)forking:由ExecStart启动的程序fork出子进程来作为此daemon的主要服务,原生的父进程在启动结束后会终止运行。

(3)oneshot:与simple类似,不过这个程序在工作完毕后就结束了,不会常驻内存中。

(4)idle:与simple类似,要执行这个daemon必须要所有的工作都顺利执行完毕后才会执行,这类的daemon通常是开机到最后才执行即可的服务。

EnvironmentFile

可以指定启动脚本的环境配置文件,例如sshd.service的配置文件写入到/etc/sysconfig/sshd当中,你也可以使用Environment=后面接多个不同的Shell变量来给予设置。

ExecStart

就是实际执行此daemon的指令或脚本程序,你也可以使用ExecStartPre或ExecStartPost在实际服务前后执行额外的指令,但是需要注意的是,指令串仅接受“指令 参数 参数……”,要傅特殊字符时,最好直接写入指令脚本里面,或使用Type=oneshot。

ExecStop

systemctl stop时执行的指令

ExecReload

systemctl reload时执行的指令

Restart

当设置Restart=1时,则当此daemon服务终止后,会再次的启动此服务。例如如果你在tty2使用文字界面登陆,操作完毕后登出,基本上这个时候tty2就已经结束服务了,但是你会看到屏幕上又产生一个新的tty2的登陆界面,那就是Restart功能,除非使用systemctl强制关闭此服务,否则这个服务会源源不绝的一直重复产生。

RemainAfterExit

当设置为RemainAfterExit=1时,则当这个daemon所属的所有程序都终止之后,此服务会再尝试启动,这对Type=oneshot的服务很有帮助。

TimeoutSec

若这个服务在启动或者关闭时,因此某些缘故无法进行进行,则我们要等多久才进入“强制结束”的状态。

KillMode

(1)process,只会终止主要的程序(ExecStart接的后面那串指令)

(2)control-group,则由此daemon所产生的其他的control-group的程序,也会被关闭。

(3)none,没有程序会被关闭

RestartSec

如果这个服务被关闭,然后需要重新启动时,大概要sleep多少时间再重新启动的,默认100ms

User

使用指定用户运行

Group

使用指定组运行

 

[Install]部分  
设置参数 参数意义说明
WantedBy 这个设置后面接的大部分是*.target unit,即这个unit本身是附挂在哪一个target unit下面,一般来说,大多的服务性质的unit都是附挂在multi-user.target下面
Also 当目前这个unit本身被enable时,Also后面接的unit也需要enable
Alias 当systemctl enable相关的服务时,则此服务会进行链接文件的创建,例如当你设置用default.target时,这个/etc/systemd/system/default.target就会链接到/usr/lib/systemd/system/multi-user.target。

补充说明

Type的类型:

    simple(默认):   #以ExecStart字段启动的进程为主进程

    forking:       #ExecStart字段以fork()方式启动,此时父进程将退出,子进程将成为主进程(后台                       运行)。一般都设置为forking

    oneshot:        #类似于simple,但只执行一次,systemd会等它执行完,才启动其他服务

    dbus:           #类似于simple, 但会等待D-Bus信号后启动

    notify:         #类似于simple, 启动结束后会发出通知信号,然后systemd再启动其他服务

    idle:           #类似于simple,但是要等到其他任务都执行完,才会启动该服务。

 

EnvironmentFile:

    指定配置文件,和连词号组合使用,可以避免配置文件不存在的异常。

 

Environment:

    后面接多个不同的shell变量。

    例如:

    Environment=DATA_DIR=/data/elk

    Environment=LOG_DIR=/var/log/elasticsearch

    Environment=PID_DIR=/var/run/elasticsearch

    EnvironmentFile=-/etc/sysconfig/elasticsearch

 

连词号(-):

    在所有启动设置之前,添加的变量字段,都可以加上连词号,表示抑制错误,即发生错误时,不影响其他命    令的执行。

    比如EnviromentFile=-/etc/sysconfig/xxx表示即使文件不存在,也不会抛异常

 

KillMode的类型:

    control-group(默认):   #当前控制组里的所有子进程,都会被杀掉

    process:                #只杀主进程

    mixed:                  #主进程将收到SIGTERM信号,子进程收到SIGKILL信号

    none:                   #没有进程会被杀掉,只是执行服务的stop命令

 

Restart的类型:

    no(默认值):    #退出后无操作

    on-success:    #只有正常退出时(退出状态码为0),才会重启

    on-failure:    # 非正常退出时,重启,包括被信号终止和超时等

    on-abnormal:   # 只有被信号终止或超时,才会重启

    on-abort:      # 只有在收到没有捕捉到的信号终止时,才会重启

    on-watchdog:   # 超时退出时,才会重启

    always:         # 不管什么退出原因,都会重启

                    #对于守护进程,推荐用on-failure

 

RestartSec字段:

    表示systemd重启服务之前,需要等待的秒数:RestartSec:30

 

Exec*字段:

    #Exec*后面接的命令,仅接受“指令参数参数..”格式,不能接受 <> | & 等特殊字符,很多bash语法也不支持。如果想支持bash语法,需要设置Tyep=oneshot

    ExecStart:      #启动服务时执行的命令

    ExecReload:     #重启服务时执行的命令

    ExecStop:       #停止服务时执行的命令

    ExecStartPre:   #启动服务前执行的命令

    ExecStartPost:  #启动服务后执行的命令

    ExecStopPost:   #停止服务后执行的命令

 

WantedBy字段:

    multi-user.target:    #表示多用户命令行状态,这个设置很重要

    graphical.target:     #表示图形用户状体,它依赖于multi-user.target



相关推荐

一、systemd概述 systemd即为system daemon,是Linux下的一种init软件,在LGPL 2.1及其后续版本许可下开源发布,开发目标是提供更优秀的框架以表示系统服务间的依赖关

1、下载镜像 https://mirrors.tuna.ts

使用root用户 1、新建redis.service服务文件 vim

一、由来 Linux一直以来采用init进程但是init有两个缺点: 1、启动时间长。Init进程是串行启动,只有前一个进程启动完,才会启动下一个进程。(这也是Centos5的主要特征) 2、启动脚本

一、概述 1、为什么Linus不使用GPLv3 在 PC 上,只要你得到了某个程序的源代码,就可以自行编译生成二进制程序,然后替换掉原有的二进制程序,你的程序自由很容易得到保证。然而 iPod、iPh

说明:这种方式只是用于方便阅读代码,因为可以在源代间快速索引跳跃。但是最后可能会有一些warning,可以不必关心,如果是强迫症,可以使用下面这种方式来去掉。

一、概述 在Linux系统中,/usr/bin和/usr/local/bin是两个常见的目录,用于存放可执行文件(二进制文件)。 很多应用都安装在/usr/local下面,先看一下automake工具

一、概述 yum是yellow dog updater,modified的简称,是rpm软件包管理器,用python写成,可以安装、移除、升级rpm包,检查并自动解决依赖性。 yum使用的软件仓库除了

# download source code from http://www.mplayerhq.hu/design7/dload.html & extract wget -cS http://www

  一、概述 vmstat命令是最常见的Linux/Unix监控工具,可以监控给定时间间隔服务器的CPU使用率、内存使用、IO情况。相比top命令,可以查看到整个机器的CPU、内存、IO的使用情况,而