您的位置:

深入理解linux systemd

一、简介

Linux systemd是一种系统和服务管理器,负责启动和管理系统上所有的进程。它是 systemd 程序包的一部分,是最新的 Linux 发行版(例如 Fedora 和 CentOS 7)中默认的 init 系统。(注意,这段简介文字可以直接从官网文字进行引用)

Systemd的设计目的是为了解决传统init系统中的许多缺点。自动化系统启动,更好的维护和管理,统一的配置文件,以及并行启动等都是 systemd 的优点。它还提供了服务监视功能,可以在服务失败时自动重启服务,大大提高了系统的可靠性。

二、基本操作

Systemd通过一些简单的命令来启动、停止或重启服务,其中最基本的命令包括:

1. systemctl start/stop/restart service_name

启动、停止或重启某个服务,其中service_name是要启动的服务名。

2. systemctl enable/disable service_name

开机自启某个服务,或者禁止开机自启某个服务。

3. systemctl status service_name

查看某个服务的状态,包括该服务是否正在运行、最后一次运行的时间、该服务所属的进程ID以及相关的错误信息。

4. journalctl -u service_name

查看某个服务的日志信息。

三、服务单元

在 Systemd 中,所有的服务都被视为单元。服务单元由单元文件(.service)定义,这些文件提供了有关服务的详细信息,并指定在何时和如何启动该服务。

以下是一个服务单元文件的示例:

[Unit]
Description=apache2 web server
After=network.target

[Service]
Type=forking
ExecStart=/usr/sbin/apache2ctl start
ExecReload=/usr/sbin/apache2ctl graceful
ExecStop=/usr/sbin/apache2ctl stop

[Install]
WantedBy=multi-user.target

在该文件中:

[Unit]:指定服务单元的名称和说明。

[Service]:指定服务如何启动、停止、重启或重加载,以及运行服务的帐户和权限。

[Install]:指定服务启动时的目标(例如multi-user.target),以及是否自动启动。

四、系统日志

Systemd 提供了原生的系统日志功能,可以通过 journalctl 命令来访问系统日志。可以通过以下命令查看所有日志:

journalctl

也可以查看指定服务的日志,例如查看apache2服务的日志:

journalctl -u apache2

为了确保日志文件大小不超过磁盘空间,Systemd 会自动设置日志滚动策略。日志文件会被自动轮换,并将旧的日志文件压缩存档。

五、防火墙

Systemd 使用了 firewalld 作为默认的防火墙管理器,firewalld 是一个动态管理的防火墙,支持基于 zone 的防火墙规则。可以通过以下命令来检查默认防火墙策略:

firewall-cmd --list-all

可以通过以下命令添加一条允许SSH访问的规则:

firewall-cmd --add-service=ssh --permanent
firewall-cmd --reload

六、网络配置

在 Systemd 中,网络配置由单元文件(.network 和 .netdev)定义。这些文件提供了有关网络设备和网络接口的详细信息,并指定在何时和如何配置网络接口。

以下是一个 .network 文件的示例:

[Match]
Name=ens33

[Network]
DHCP=yes

在该文件中,[Match] 指定了需要配置的网络接口名称,[Network] 则指定了网络接口的配置信息。这里使用了 DHCP=yes 来设置自动获取 IP 地址。还可以使用 StaticAddress、DNS、Gateway 等选项来进行详细配置。

七、定时任务

Systemd 使用了 timer 单元来实现定时任务。可以通过创建 .timer 文件来定义定时器,然后创建一个对应的 .service 文件来指定要执行的任务。以下是一个定时任务的示例:

[Unit]
Description=Run backup script every day

[Timer]
OnCalendar=*-*-* 01:00:00
Unit=backup.timer

[Install]
WantedBy=timers.target

在该文件中,[Timer] 指定了任务的执行时间和要执行的任务单元。这里使用了 OnCalendar=*-*-* 01:00:00 来表示在每天凌晨 1 点执行任务。还可以使用 OnActiveSec、OnBootSec 等选项来指定定时器的触发方式。

八、总结

通过深入理解 Systemd,我们可以更好地管理和维护 Linux 系统,提高系统的可靠性和可维护性。这篇文章从基本操作、服务单元、系统日志、防火墙、网络配置和定时任务等多个方面对 Systemd 进行了详细的介绍,希望可以帮助读者更好地理解和应用 Systemd。