亲宝软件园·资讯

展开

linux 系统进程管理工具systemd详解(systemctl命令、创建自己的systemd服务)

西京刀客 人气:0

linux systemd

什么是 systemd

Linux 系统在启动过程中,内核完成初始化以后,由内核第一个启动的程序便是 init 程序,路径为 /sbin/init(为一个软连接,链接到真实的 init 进程),其 PID 为1,它为系统里所有进程的“祖先”,Linux 中所有的进程都由 init 进程直接或间接进行创建并运行,init 进程以守护进程的方式存在,负责组织与运行系统的相关初始化工作,让系统进入定义好的运行模式,如命令行模式或图形界面模式。

Systemd(系统管理守护进程),最开始以GNU GPL协议授权开发,现在已转为使用GNU LGPL协议,它是如今讨论最热烈的引导和服务管理程序。如果你的Linux系统配置为使用Systemd引导程序,它取替传统的SysV init,启动过程将交给systemd处理。Systemd的一个核心功能是它同时支持SysV init的后开机启动脚本。

systemd是目前Linux系统上主要的系统守护进程管理工具,由于init一方面对于进程的管理是串行化的,容易出现阻塞情况,另一方面init也仅仅是执行启动脚本,并不能对服务本身进行更多的管理。所以从CentOS 7开始也由systemd取代了init作为默认的系统进程管理工具

systemd 是内核启动后的第一个用户进程,PID 为1,是所有其它用户进程的父进程。

systemd 特点

unit(单元)

系统初始化需要做的事情非常多。需要启动后台服务,比如启动 ssh 服务;需要做配置工作,比如挂载文件系统。这个过程中的每一步都被 systemd 抽象为一个配置单元,即 unit。可以认为一个服务是一个配置单元,一个挂载点是一个配置单元,一个交换分区的配置是一个配置单元等等。

下面是一些常见的 unit 类型:

  **每个配置单元都有一个对应的配置文件,系统管理员的任务就是编写和维护这些不同的配置文件,比如一个 MySQL 服务对应一个 mysql.service 文件。**

systemd unit目录

Unit 文件按照 Systemd 约定,应该被放置指定的三个系统目录之一中。这三个目录是有优先级的,如下所示,越靠上的优先级越高。因此,在三个目录中有同名文件的时候,只有优先级最高的目录里的那个文件会被使用。

/etc/systemd/system:系统或用户自定义的配置文件
/run/systemd/system:软件运行时生成的配置文件
/usr/lib/systemd/system:系统或**第三方软件安装时添加的配置文件**。

Systemd 默认从目录 /etc/systemd/system/ 读取配置文件。但是,里面存放的大部分文件都是符号链接,指向目录 /usr/lib/systemd/system/,真正的配置文件存放在那个目录。

Unit 和 Target

Target 就是一个 Unit 组,包含许多相关的 Unit 。

Unit 是 Systemd 管理系统资源的基本单元,可以认为每个系统资源就是一个 Unit,并使用一个 Unit 文件定义。在 Unit 文件中需要包含相应服务的描述、属性以及需要运行的命令。

Unit 文件结构

systemd.service 中文手册
参考URL:

每一个服务以.service结尾,一般会分为3部分:[Unit]、[Service]和[Install]

把自己的服务使用systemd管理需要书写*.service文件,如服务名xxx.service,下面我们介绍一下*.service文件里面具体的内容。
进入目录 cd /etc/systemd/system/

cat << EOF > /etc/systemd/system/xxx.service
[Unit]
Description=Xxx Service
Documentation=https://www.secureweb3.com/
After=network-online.target
Wants=network-online.target

[Service]
User=root
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
NoNewPrivileges=true
ExecStart=+$APPROOT/xxx
Restart=on-failure
RestartPreventExitStatus=23

[Install]
WantedBy=multi-user.target
EOF

network.target代表有网路,network-online.target代表一个连通着的网络。

[service]

美: [ˌkeɪpəˈbɪləti]
英: [.keɪpə’bɪləti]
n. 能力;才能;(国家的)军事力量
网络 性能;容量;才干

bound
美: [baʊnd]
英: [baʊnd]
n. 边界;跳跃;范围;界限
v. 跳跃;邻接;“bind”的过去分词和过去式;限制
adj. 打算;要往(某处)去的;被束缚的;理应…的
网络 弹跳;边边界框;弹跳力

CAP_NET_ADMIN
执行各种与网络相关的操作:
* 接口配置;
* 管理 IP 防火墙、伪装和
会计;
* 修改路由表;
*绑定到任何地址以进行透明代理;
* 设置服务类型 (TOS);
* 清除驱动程序统计信息;
* 设置混杂模式;
*启用多播;
* 使用setsockopt(2)设置以下套接字选项:
SO_DEBUG、SO_MARK、SO_PRIORITY(对于优先级外
范围 0 到 6)、SO_RCVBUFFORCE和SO_SNDBUFFORCE。

   CAP_NET_BIND_SERVICE
          将套接字绑定到 Internet 域特权端口(端口
          小于 1024 的数字)。

[Install]

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

这个设置非常重要,因为执行systemctl enable sshd.service命令时,sshd.service的一个符号链接,就会放在/etc/systemd/system目录下面的multi-user.target.wants子目录之中。

一般来说,常用的 Target 有两个:一个是multi-user.target,表示多用户命令行状态;另一个是graphical.target,表示图形用户状态,它依赖于multi-user.target。

Linux命令——systemctl

Systemd 入门教程:实战篇
参考URL: https:
Linux命令——systemctl
参考URL:https:

systemd对应的进程管理命令就是systemctl。

systemctl   [command]    [unit](配置的应用名称)
 
command可选项· 
start:启动指定的unit         systemctl start nginx
stop:关闭指定的unit          systemctl stop nginx
restart:重启指定unit         systemctl restart nginx
reload:重载指定unit          systemctl reload nginx
enable:系统开机时自动启动指定unit,前提是配置文件中有相关配置 systemctl enable nginx
disable:开机时不自动运行指定unit  systemctl disable nginx
status:查看指定unit当前运行状态   systemctl status nginx

参考

Systemd 入门教程:实战篇
参考URL: https:

加载全部内容

相关教程
猜你喜欢
用户评论