Systemctl 详解

Systemctl 详解,第1张

Systemd 并不是一个命令,而是一组命令,涉及到系统管理的方方面面。

systemctl 是 Systemd 的主命令,用于管理系统。

systemd-analyze 命令用于查看启动耗时。

hostnamectl 命令用于查看当前主机的信息。

localectl 命令用于查看本地化设置。

timedatectl 命令用于查看当前时区设置。

loginctl 命令用于查看当前登录的用户。

Systemd 可以管理所有系统资源。不同的资源统称为 Unit(单位)。

Unit 一共分成12种。

systemctl list-units 命令可以查看当前系统的所有 Unit 。

systemctl status 命令用于查看系统状态和单个 Unit 的状态。

除了 status 命令, systemctl 还提供了三个查询状态的简单方法,主要供脚本内部的判断语句使用。

对于用户来说,最常用的是下面这些命令,用于启动和停止 Unit(主要是 service)。

Unit 之间存在依赖关系:A 依赖于 B,就意味着 Systemd 在启动 A 的时候,同时会去启动 B。

systemctl list-dependencies 命令列出一个 Unit 的所有依赖。

上面命令的输出结果之中,有些依赖是 Target 类型(详见下文),默认不会展开显示。如果要展开 Target,就需要使用 --all 参数。

每一个 Unit 都有一个配置文件,告诉 Systemd 怎么启动这个 Unit 。

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

systemctl enable 命令用于在上面两个目录之间,建立符号链接关系。

如果配置文件里面设置了开机启动, systemctl enable 命令相当于激活开机启动。

与之对应的, systemctl disable 命令用于在两个目录之间,撤销符号链接关系,相当于撤销开机启动。

配置文件的后缀名,就是该 Unit 的种类,比如 sshd.socket 。如果省略,Systemd 默认后缀名为 .service ,所以 sshd 会被理解成 sshd.service 。

systemctl list-unit-files 命令用于列出所有配置文件。

这个命令会输出一个列表。

这个列表显示每个配置文件的状态,一共有四种。

注意,从配置文件的状态无法看出,该 Unit 是否正在运行。这必须执行前面提到的 systemctl status 命令。

一旦修改配置文件,就要让 SystemD 重新加载配置文件,然后重新启动,否则修改不会生效。

配置文件就是普通的文本文件,可以用文本编辑器打开。

systemctl cat 命令可以查看配置文件的内容。

从上面的输出可以看到,配置文件分成几个区块。每个区块的第一行,是用方括号表示的区别名,比如 [Unit] 。注意,配置文件的区块名和字段名,都是大小写敏感的。

每个区块内部是一些等号连接的键值对。

注意,键值对的等号两侧不能有空格。

[Unit] 区块通常是配置文件的第一个区块,用来定义 Unit 的元数据,以及配置与其他 Unit 的关系。它的主要字段如下。

[Install] 通常是配置文件的最后一个区块,用来定义如何启动,以及是否开机启动。它的主要字段如下。

[Service] 区块用来 Service 的配置,只有 Service 类型的 Unit 才有这个区块。它的主要字段如下。

Unit 配置文件的完整字段清单,请参考 官方文档 。

启动计算机的时候,需要启动大量的 Unit。如果每一次启动,都要一一写明本次启动需要哪些 Unit,显然非常不方便。Systemd 的解决方案就是 Target。

简单说,Target 就是一个 Unit 组,包含许多相关的 Unit 。启动某个 Target 的时候,Systemd 就会启动里面所有的 Unit。从这个意义上说,Target 这个概念类似于"状态点",启动某个 Target 就好比启动到某种状态。

传统的 init 启动模式里面,有 RunLevel 的概念,跟 Target 的作用很类似。不同的是,RunLevel 是互斥的,不可能多个 RunLevel 同时启动,但是多个 Target 可以同时启动。

Target 与 传统 RunLevel 的对应关系如下。

它与 init 进程的主要差别如下。

(1)默认的 RunLevel (在 /etc/inittab 文件设置)现在被默认的 Target 取代,位置是 /etc/systemd/system/default.target ,通常符号链接到 graphical.target (图形界面)或者 multi-user.target (多用户命令行)。

(2)启动脚本的位置 ,以前是 /etc/init.d 目录,符号链接到不同的 RunLevel 目录 (比如 /etc/rc3.d 、 /etc/rc5.d 等),现在则存放在 /lib/systemd/system 和 /etc/systemd/system 目录。

(3)配置文件的位置 ,以前 init 进程的配置文件是 /etc/inittab ,各种服务的配置文件存放在 /etc/sysconfig 目录。现在的配置文件主要存放在 /lib/systemd 目录,在 /etc/systemd 目录里面的修改可以覆盖原始设置。

Systemd 统一管理所有 Unit 的启动日志。带来的好处就是,可以只用 journalctl 一个命令,查看所有日志(内核日志和应用日志)。日志的配置文件是 /etc/systemd/journald.conf 。

journalctl 功能强大,用法非常多。

NTP服务器顾名思义就是时间同步服务器(Network Time Protocol),Linux下的ntp服务器配置相对来说都比较容易,但在Linux下有一个弊端, 不同时区或者说是时间相差太大的无法同步 ,所以在配置ntp服务器之前需要把时间配置成相同的。

NTP时钟同步方式说明

NTP在linux下有两种时钟同步方式,分别为直接同步和平滑同步:

直接同步

使用ntpdate命令进行同步,直接进行时间变更。如果服务器上存在一个12点运行的任务,当前服务器时间是13点,但标准时间时11点,使用此命令可能会造成任务重复执行。因此使用ntpdate同步可能会引发风险,因此该命令也多用于配置时钟同步服务时第一次同步时间时使用。

平滑同步

使用ntpd进行时钟同步,可以保证一个时间不经历两次,它每次同步时间的偏移量不会太陡,是慢慢来的,这正因为这样,ntpd平滑同步可能耗费的时间比较长。

标准时钟同步服务

http://www.pool.ntp.org/zone/cn

这个网站包含全球的标准时间同步服务,也包括对中国时间的同步,对应的URL为:cn.pool.ntp.org

在其中也描述了ntp配置文件中的建议写法:

server  1.cn.pool.ntp.org

server  2.asia.pool.ntp.org

server  3.asia.pool.ntp.org

实验室集群没有联网,我们需要搭建ntp服务器并进行时间同步。

现使用的系统为centos7.2,机器使用情况如下表所示,这里以192.168.1.102为ntp server,192.168.1.104为client对时间进行同步。

NTP server         192.168.1.102

NTP client           192.168.1.104

1.在集群中所有节点上安装ntp

# yum  -y  install ntp

2.所有节点设置时区,这里设置为中国所用时间

# timedatectl set-timezone Asia/Shanghai 

3.在server节点上启动ntp服务

# systemctl startntpd

# systemctl enable ntpd

4.在server节点上设置现在的准确时间

# timedatectl set-time HH:MM:SS 

5.在server节点上设置其ntp服务器为其自身,同时设置可以接受连接服务的客户端,是通过更改/etc/ntp.conf文件来实现,其中server设置127.127.1.0为其自身,新增加一个 restrict 段为可以接受服务的网段

 # vim  /etc/ntp.conf

6.重启ntpd服务 

# systemctl restart ntpd 

# timedatectl

NTP synchronized: yes

启用ntpd后,服务器就开启了ntpd自动同步,无法使用 timedatectl set-time HH:MM:SS重新设置时间。

如果要使用timedatectl set-time HH:MM:SS 重新设置时间:

#  systemctl stop  ntpd 

# timedatectl set-ntp  false

# timedatectl set-time HH:MM:SS

# hwclock  -w

#  systemctl start  ntpd 

1.客户端时区需要和服务端保持一致,否则无法同步时间

# timedatectl set-timezone   

Asia/Shanghai 

2.安装同步软件包

# yum   -y install  ntpdate

3. 修改/etc/sysconfig/ntpdate,让ntpdate每次同步时间之后把时间写入hwclock,相当于命令hwclock -w

将最后一行SYNC_HWCLOCK=no修改为:SYNC_HWCLOCK=yes

#  vim  /etc/sysconfig/ntpdate

4.客户端定时任务配置

# crontab  -e

59  23  *  *  *   /sbin/ntpdate  192.168.1.102

设置为每天23:59分执行,重启crond服务

######################

定时任务基本格式 : 

***** command 

分 时 日 月 周 命令 

第1列表示分钟1~59 每分钟用*或者 */1表示 

第2列表示小时1~23(0表示0点) 

第3列表示日期1~31 

第4列表示月份1~12 

第5列标识号星期0~6(0表示星期天) 

第6列要运行的命令

################################ 

5.重启定时任务

# systemctl  restart crond.service


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11293052.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存