Linux

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > Linux > linux 进程管理工具systemd

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

作者:西京刀客

Unit 是 Systemd 管理系统资源的基本单元,可以认为每个系统资源就是一个 Unit,并使用一个 Unit 文件定义,这篇文章主要介绍了linux 系统进程管理工具systemd详解(systemctl命令、创建自己的systemd服务),需要的朋友可以参考下

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://www.jb51.net/article/269756.htm
Linux命令——systemctl
参考URL:https://www.jb51.net/article/269756.htm

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://www.jb51.net/article/269756.htm

到此这篇关于linux 系统进程管理工具systemd详解(systemctl命令、创建自己的systemd服务)的文章就介绍到这了,更多相关linux 进程管理工具systemd内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文