Systemd
是一个 Linux
系统的初始化系统和服务管理器,用于启动和守护系统进程。它代替了传统的 SysVinit
和 Upstart
,成为许多流行 Linux
发行版的默认初始化系统,如 CentOS
、Ubuntu
、Debian
等。Systemd
提供了更快的启动速度、并行启动、更好的事件并行处理等功能,同时支持更多的系统和服务管理功能。
Systemd 的基本概念和组件
- Unit(单元):
- Systemd 的基本单位,用于描述系统上运行的各种资源,如服务、套接字、设备等。
- 单元可以是服务单元(.service)、挂载单元(.mount)、套接字单元(.socket)等。
- Service Unit(服务单元):
- 用于描述一个系统服务的单元,例如网络服务、数据库服务等。
Service unit
文件通常以.service
结尾,位于/etc/systemd/system/
或/usr/lib/systemd/system/
目录下。
Target Unit
(目标单元):
- 用于组织和描述一组相关的单元。
- 可以将一组服务定义为一个目标,例如多用户模式(
multi-user.target
)、图形用户界面模式(graphical.target
)等。
- Systemd 配置文件:
/etc/systemd/system/
:用于存放系统管理员创建的单元配置文件。/usr/lib/systemd/system/
:用于存放系统默认的单元配置文件。
Systemd 的工作原理
初始化:
Systemd
在启动时会加载系统配置,并根据配置文件创建相应的单元。- 它通过依赖关系和并行启动的方式,高效地管理系统资源和服务。
服务管理:
Systemd
监控和管理系统上运行的服务单元。- 可以启动、停止、重启、启用、禁用服务,以及查看服务状态等。
事件监听:
Systemd
可以监听系统事件,如设备挂载、网络状态变化等。- 可以通过单元的依赖关系和条件判断来触发相应的操作。
日志记录:
Systemd
使用Journal
来记录系统日志,提供了更加结构化和高效的日志管理方式。
Systemd 的适用场景
- 高性能服务器:
Systemd
能够并行启动系统服务,提高服务器启动速度和资源利用率。 - 嵌入式系统:
Systemd
可以精细管理系统资源,适用于嵌入式设备和物联网设备。 - 容器化环境:
Systemd
可以作为容器内部的初始化系统,管理容器内的服务和资源。 - 桌面系统:
Systemd
支持管理图形用户界面服务,适用于桌面系统和笔记本电脑。
实战配置:
配置Systemd 启动python运行的程序api.py
- 首先,创建一个名为
api.service
的服务单元文件,位置通常为/etc/systemd/system/
目录下。
sudo nano /etc/systemd/system/api.service
- 在该文件中输入以下内容:
[Unit]
Description=API Service
After=network.target
[Service]
User=username
Group=groupname
WorkingDirectory=/path/to/your/api.py
ExecStart=/usr/bin/python3 /path/to/your/api.py
Restart=always
[Install]
WantedBy=multi-user.target
- 确保替换以下内容:
username
:你希望服务运行的用户。groupname
:你希望服务运行的用户组。/path/to/your/api.py
:你的api.py
文件的绝对路径。
保存并关闭文件(在Nano
编辑器中按下Ctrl + X
,然后按Y
确认保存,最后按Enter
离开)。
- 重新加载 Systemd 配置:
sudo systemctl daemon-reload
- 启动你的服务:
sudo systemctl start api
- 可以使用以下命令来检查服务状态:
sudo systemctl status api
- 如果一切正常,你可以配置开机自启动:
sudo systemctl enable api
这样,Python 程序就会作为一个 Systemd 服务在系统启动时自动启动。