1,介绍

centos使用systemd进行系统初始化,systemd是linux系统中目前流行的初始化工具,能提高系统的启动速度。

默认目录为/etc/systemd/system,文件以.service结尾,基本都是符号连接,真实存放在/usr/lib/systemd/system目录,有系统(system)和用户(user)之分

2,service文件参数介绍

service文件包含三个部分[Unit]、[Service]、[Install]

[Unit]
Description=kkm
After=network.service   

[Service]
Type=simple
ExecStart=/home/hy/kkm.sh
Restart=always
RestartSec=10
PrivateTmp=true   

[Install]
WantedBy=multi-user.target

部分参数说明,具体参考官网说明 

名称

说明

[Unit]

Description

服务描述

Documentation

服务文档说明,一组用空格分隔的文档URI列表

Wants

配合的其他 Unit 列表,触发启动列出的每个 Unit 模块,如果它们没有运行,当前 Unit 不会启动失败

Requires

依赖的其他 Unit 列表,列在其中的 Unit 模块会在这个服务启动的同时被启动,如果它们没有运行,当前 Unit 会启动失败

After

必须在当前 Unit 之前启动

Before

与 After 相反

Conflicts

不能与当前 Unit 同时运行

[Service]

Type

服务的类型,有simpleexecforkingoneshotdbusnotify, idle

simple:默认值,执行ExecStart指定的命令,启动主进程

exec: 同simple
forking:以 fork 方式从父进程创建子进程,创建后父进程会立即退出
oneshot:一次性进程,Systemd 会等当前服务退出,再继续往下执行
dbus:当前服务通过D-Bus启动
notify:当前服务启动完毕,会通知Systemd,再继续往下执行
idle:若有其他任务执行完毕,当前服务才会运行

Environment

为服务添加环境变量

EnvironmentFile

指定加载一个包含服务所需的环境变量列表的文件,文件中的每一行都是一个环境变量的定义。

ExecStart

启动当前服务的命令(需要使用绝对路径)

ExecStartPre

启动当前服务之前执行的命令,可以有多个,所有命令会按照文件中书写的顺序依次被执行。

ExecStartPost

指定在启动执行 ExecStart 的命令后的收尾工作,也可以有多个。

ExecStop

停止服务所需要执行的主要命令。(需要使用绝对路径)

ExecStopPost

指定在 ExecStop 命令执行后的收尾工作,也可以有多个。

ExecReload

重新加载服务所需执行的主要命令。(需要使用绝对路径)

Restart

定义何种情况 Systemd 会自动重启当前服务。常用的值有 no,on-success,on-failure,on-abnormal,on-abort 和 always。默认值为 no,即不会自动重启服务。这些不同的值分别表示了在哪些情况下,服务会被重新启动

RestartSec

如果服务需要被重启,这个参数的值为服务被重启前的等待秒数。

Nice

服务的进程优先级,值越小优先级越高,默认为0。-20为最高优先级,19为最低优先级。

WorkingDirectory

指定服务的工作目录。

RootDirectory

指定服务进程的根目录( / 目录),如果配置了这个参数后,服务将无法访问指定目录以外的任何文件。

User

指定运行服务的用户,会影响服务对本地文件系统的访问权限。

Group

指定运行服务的用户组,会影响服务对本地文件系统的访问权限。

PrivateTmp

是否给服务分配独立的临时空间(true/false)

[Install]

WantedBy

和 Wants 作用相似,只是后面列出的不是服务所依赖的模块,而是依赖当前服务的模块。“WantedBy=multi-user.target” 表明当系统以多用户方式(默认的运行级别)启动时,这个服务需要被自动运行

RequiredBy

和Requires 作用相似,同样后面列出的不是服务所依赖的模块,而是依赖当前服务的模块。

Alias

当前 Unit 可用于启动的别名

Also

当这个服务被 enable/disable 时,将自动 enable/disable 后面列出的每个模块。