linux中系统服务管理学习手记

linux中系统服务管理学习手记

一、systemd服务管理

systemd服务,通过systemctl命令 管理

1、systemd简述

2、systemd服务管理

systemd服务通过systemctl管理:

#修改服务文件后,重载服务系统
systemctl daemon-reload

#启用自动启动
systemctl enable httpd

#停用自动启动
systemctl disable httpd

#启动服务
systemctl start httpd

#停止服务
systemctl stop httpd

#重启服务
systemctl restart httpd

#查看服务状态
systemctl status httpd

3、service文件 配置

分3个部分:

[Unit]
...

[Service]
...

[Install]
...

[Unit] 字段:这个字段主要给出服务描述、启动顺序和依赖关系。

[Unit]
Description:给出当前服务的简单描述。

Documentation:给出文档位置。

After:表示在什么服务之后启动。

Before:表示在什么服务之前启动。

Wants:表示该服务和某服务存在某种弱依赖关系,即某服务停止运行或退出不影响该服务继续运行。

Requires:则表示”强依赖”关系,即某服务停止运行或退出,改服务也必须停止运行。

字段说明

· Description:给出当前服务的简单描述。

· Documentation:给出文档位置。

· After:表示在什么服务之后启动。

· Before:表示在什么服务之前启动。

· Wants:表示该服务和某服务存在某种弱依赖关系,即某服务停止运行或退出不影响该服务继续运行。

· Requires:则表示”强依赖”关系,即某服务停止运行或退出,改服务也必须停止运行。

After和Before只涉及启动顺序,不涉及依赖关系。

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

[service]字段

[Server]字段

这个字段主要给出服务的启动行为,如何启动、重启、停止。

字段说明

· Type:定义启动类型。它可以设置的值如下:

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

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

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

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

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

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

· ExecStart:定义启动进程时执行的命令,就是手动启动时执行的命令。

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

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

· ExecStartPre:启动服务之前执行的命令。

· ExecStartPost:启动服务之后执行的命令。

· ExecStopPost:停止服务之后执行的命令。

· KillMode:定义Systemd如何停止sshd服务。它可以设置的值如下:

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

o process:只杀主进程。

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

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

· Restart:定义了sshd退出后,Systemd的重启方式。它可以设置的值如下:
对于守护进程,推荐设为on-failure。对于那些允许发生错误退出的服务,可以设为on-abnormal。

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

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

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

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

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

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

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

· RestartSec:表示Systemd重启服务之前,需要等待的秒数。

· user:可以设置服务的用户名。

· WorkingDirectory:指定服务的安装目录。

[Install]字段

该字段定义如何安装这个配置文件,即怎样做到开机自启。

字段说明:

· WantedBy:表示该服务所在的Target。

Target的含义是服务组,表示一组服务。WantedBy=multi-user.target指的是服务所在的Target是multi-user.target

Systemd有默认的启动Target。就是multi-user.target,在这个组里的所有服务,都将开机启动。

4、失败服务重启

长时间运行的进程(例如 Web 服务器)经常需要的一个有用功能是能够在发生崩溃时自动重新启动进程,以最大限度地减少停机时间。如果您的服务由 Systemd 管理,您可以使用 RestartRestartSec 选项为特定服务配置此行为。

1、

在service文件内加入以入语句:

Restart=always
RestartSec=3

2、

在[Service] potion下添加以下必需参数:

[Unit]
...

[Service]
Restart=on-failure
RestartSec=5s
...

[Install]
...

相关说明:

Restart:配置在服务进程退出,终止或超时时是否应重新启动服务。
on-failure:如果设置为on-failure,则当进程以非零退出代码退出,由信号终止,当操作(例如服务重新加载)超时,以及何时触发配置的监视程序超时时,将重新启动服务。

RestartSec:配置重新启动服务之前的休眠时间,以秒为单位获取无单位值,或以“5分20秒”为单位获取时间跨度值,默认为100毫秒。

5s:等待5秒然后启动服务。

3、

[Unit]
Description=Your Daemon Name
StartLimitIntervalSec=300
StartLimitBurst=5

[Service]
ExecStart=/path/to/executable
Restart=on-failure
RestartSec=1s

[Install]
WantedBy=multi-user.target

根据上面的配置,在 300 秒的时间间隔内,服务重启次数不能超过 5 次。如果服务崩溃超过五次,将不再允许它启动。

重新加载 systemd 管理器配置 ( sudo systemctl daemon-reload) 后,终止正在运行的服务并确认它在指定的时间过后自动重新启动RestartSec

二、Service命令管理

service命令其实是去/etc/init.d目录下,去执行相关程序

# service命令启动redis脚本
service redis start
# 直接启动redis脚本
/etc/init.d/redis start
# 开机自启动
update-rc.d redis defaults

1、

service管理服务:

service httpd enable
service httpd start
service httpd stop
service httpd status
service httpd restart

service命令其实是去/etc/init.d目录下,去执行相关程序


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 vault@coolxy.cn

×

喜欢就点赞,疼爱就打赏

github