天天看点

[centos7]自启动服务设置说明及nginx开机自启动设置基础环境注册服务附(参考配置)

基础环境

OS:CentOS7

Ngninx: 1.19.7

注册服务

安装服务

CentOS服务常用目录:/lib/systemd/system/

一般系统启动服务来源于上面这个目录,服务对应文件名,以".service"结尾

# 切换至服务存储目录
cd /lib/systemd/system/
# 创建服务,注意文件名即服务名 ,也可以用vi/vim直接编辑文件(没有会自动创建)
touch nginx.service

           

nginx.server服务内容(其中路径为默认安装路径,建议根据实际进行修改)

[Unit]
Description=nginx service
After=network.target 
   
[Service] 
Type=forking 
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true 
   
[Install] 
WantedBy=multi-user.target
           

配置说明:

[Unit]服务的说明

Description: 描述服务,还一个Documentation字段用于给出文档位置

After: 描述服务启动顺序,还有一个Before字段,定义应该在哪些服务之前启动

注意,After和Before字段只涉及启动顺序,不涉及依赖关系

另外还有两个可能用到的字段

Wants: 表示与nginx服务之间存在"弱依赖"关系,即如果依赖服务启动失败或停止运行,不影响nginx服务的继续执行。

Requires: 字段则表示"强依赖"关系,即如果该服务启动失败或异常退出,那么nginx服务也必须退出。

注意,Wants字段与Requires字段只涉及依赖关系,与启动顺序无关,默认情况下是同时启动的。

[Service]服务运行参数的设置

EnvironmentFile字段:指定当前服务的环境参数文件。该文件内部的key=value键值对,可以用$key的形式,在当前配置文件中获取,如启动命令中:

ExecStart=/usr/sbin/xxx -D $OPTIONS

Type: 可选值如下:

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

forking:ExecStart字段将以fork()方式启动,此时父进程将会退出,子进程将成为主进程

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

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

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

idle:类似于simple,但是要等到其他任务都执行完,才会启动该服务。一种使用场合是为让该服务的输出,不与其他服务的输出相混合

ExecStart: 启动命令

ExecReload: 重启命令

ExecStop: 停止命令

PrivateTmp: True表示给服务分配独立的临时空间

ExecStartPre字段:: 启动服务之前执行的命令

ExecStartPost字段:: 启动服务之后执行的命令

ExecStopPost字段:: 停止服务之后执行的命令

.

KillMode:

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

process:只杀主进程

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

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

.

Restart:

no(默认值):退出后不会重启

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

on-failure:非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启

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

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

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

always:不管是什么退出原因,总是重启

.

RestartSec:

重启服务之前,需要等待的秒数

注意:

[Service]的启动、重启、停止命令需使用完整路径

[Install]服务安装设置(如何设置开机启动)

***WantedBy:***表示该服务所在的服务组,常见服务组如下:

multi-user.target: 开机启动

shutdown.target: 关机

其他常用命令

# 获取当前服务组
systemctl get-default
# 重新加载配置文件
systemctl daemon-reload nginx
# 启动nginx服务
systemctl start nginx
# 停止服务
systemctl stop nginx
# 重新启动服务
systemctl restart nginx
# 查看所有已启动的服务
systemctl list-units --type=service     
# 查看服务当前状态
systemctl status nginx
# 设置开机自启动
systemctl enable nginx
# 取消开机自启动
systemctl disable nginx.service         
           

附(参考配置)

Docker默认安装后的服务配置如下:

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service containerd.service
Wants=network-online.target
Requires=docker.socket containerd.service

[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always

# Note that StartLimit* options were moved from "Service" to "Unit" in systemd 229.
# Both the old, and new location are accepted by systemd 229 and up, so using the old location
# to make them work for either version of systemd.
StartLimitBurst=3

# Note that StartLimitInterval was renamed to StartLimitIntervalSec in systemd 230.
# Both the old, and new name are accepted by systemd 230 and up, so using the old name to make
# this option work for either version of systemd.
StartLimitInterval=60s

# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity

# Comment TasksMax if your systemd version does not support it.
# Only systemd 226 and above support this option.
TasksMax=infinity

# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes

# kill only the docker process, not all processes in the cgroup
KillMode=process
OOMScoreAdjust=-500

[Install]
WantedBy=multi-user.target
           

继续阅读