关于Linux服务的学习

服务

在Linux中,服务是在后台运行的程序,服务的名称最后一般带有字母 d,例如 smbdhttpdvsftpd等因为 d 是 单词 daemon(守护进程)的首字母。

Linux下服务配置

Linux中每一个服务都有一个配置文件,一般存放在 /lib/systemd/system 目录下。

/etc/systemd/system 也有服务的配置文件,是 /lib/systemd/system 中服务的软连接,只有服务被设置为开机自启才会存在于/etc/systemd/system这个目录中,系统开机时,systemd(服务管理器) 只会读取该目录下的配置文件。

服务配置文件介绍

服务的配置文件中分为三个区块,分别为 [Unit][Service][Install]

[Unit]

[Unit] 用于定义服务启动的先后顺序与其他服务的依赖关系。可设置参数如下:

Description    // 表示对该服务的描述
Documentation  // 服务的文档地址
Requires       // 表示该服务与其他服务有依赖关系,其他服务停止运行,该服务也会停止运行
Wants          // 表示该服务与其他服务存在某种弱依赖关系,其他服务停止也不会导致该服务停止
Before         // 表示启动顺序,该服务必须要在其他服务之前启动
After          // 表示启动顺序,该服务必须要在其他服务之后启动
Conflicts      // 表示其他服务不能与该服务同时运行

[Service]

[Service] 用于指出服务的类型以及如何启动。可设置数如下:

Type: 用于指出服务的启动类型,可取的类型有:

Type=simple     // 默认值,运行ExecStart字段指定的进程,也就是启动主进程
Type=forking    // 以 fork() 方式从父进程创建子进程,创建后父进程会立即退出
Type=oneshot    // 类似于simple,但只执行一次,Systemd 会等当前服务执行完,才启动其他服务
Type=dbus       // 类似于simple,但当前服务通是过D-Bus启动
Type=notify     // 类似于simple,当前服务启动完毕,会通知Systemd,systemd再继续启动其他服务
Type=idle       // 类似于simple,但要等其他任务执行完,当前服务才会运行

关于启动停止的命令设置

ExecStart       // 指出启动主进程要执行的命令
ExecStartPre    // 指出启动当前服务之前执行的命令
ExecStartPost   // 指出启动当前服务之后执行的命令
ExecReload      // 指出重启当前服务时执行的命令
ExecStop        // 指出停止当前服务时执行的命令
ExecStopPost    // 停止当其服务之后执行的命令

Restart: 定义了服务退出后,该服务的重启方式。可取得值有:

Restart=no              // 默认值,退出后不重启
Restart=on-success      // 只有正常退出时(退出状态码为0),才会重启
Restart=on-failure      // 非正常退出时(退出状态码不为0),包括被信号终止或启动超时,才会重启
Restart=on-abnormal     // 只有被信号终止和超时,才会重启
Restart=on-abort        // 只有在收到没有捕捉到的信号终止时,才会重启
Restart=on-watchdog     // 服务启动超时退出时,才会重启
Restart=always          // 不管什么原因退出,总会重启

RestartSec              // 服务重启前需要等待的秒数
TimeoutSec              // 停止当前服务之前等待的秒数

环境变量

EnvironmentFile         // 指定保存当前服务需要的环境变量的文件,以键值对的形式保存

可以在环境变量文件前加上 - 表示即使加载出错,或者文件不存在也不影响其他命令的执行,也不会抛出错误,例如:

EnvironmentFile=-/etc/environment

KillMode:

KillMode                    // 表示如何停止当前服务,可取的值有:
KillMode=control-group      // 默认值,当前控制组里面的所有子进程都会被杀掉
KillMode=process            // 只会杀死主进程
KillMode=mixed              // 主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号
KillMode=none               // 没有进程会被杀掉,只是服务将会被停掉

[Install]

[Install] 用来定义如何启动,以及是否开机启动,可设置参数如下:

WantedBy    // 它的值是一个或多个 Target,当前服务激活时(enable)符号链接会放入/etc/systemd/system目录下面以 Target 名 + .wants后缀构成的子目录中
RequiredBy  // 它的值是一个或多个 Target,当前服务激活时,符号链接会放入/etc/systemd/system目录下面以 Target 名 + .required后缀构成的子目录中
Alias       // 当前服务可用于启动的别名
Also        // 当前服务激活(enable)时,会被同时激活的其他服务

实例

配置一个test.service服务

[Unit]
Description=This is a test service      // 描述
After=network.target        // 在network.target之后启动,一般可以设置成这个
[Service]
Type=simple     // 默认值,启动主进程
User=root       // 设置进程所有者为 root
Group=root      // 设置进程所属组为 root
WorkingDirectory=/home/student/test/        // 工作目录
ExecStart=/home/student/test/test-exe       // 主进程的绝对路径
Restart=always          // 进程停止时也会自动重启
TimeoutStartSec=2s      // 停止当前服务之前等待2秒
RestartSec=1            // 重启服务时需要等待1秒
[Install]
WantedBy=multi-user.target      // 一般设置为 multi-user.target
Alias=testd             // 别名

配置好服务的配置文件之后需要重新加载配置文件,并启动该服务

systemctl daemon-reload
sudo systemctl restart test.service

systemctl 命令的学习可参考这篇Linux基础命令的学习

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值