Linux systemd配置
介绍:
systemd是Linux系统工具,用来启动守护进程,已成为大多数发行版的标准配置。它是一个初始化程序(init)和SystemV初始化脚本的现代替代者。Systemd可以接管后台服务、结束、状态查询,以及日志归档、设备管理、电源管理、定时任务等许多职责。
Systemd是所有进程之母,负责将Linux主机启动到可以做生产性任务的状态。Systemd可以管理所有系统资源,不同的资源统称为Unit(单位)。在Systemd的生态圈中,Unit文件统一了过去各种不同系统资源配置格式,例如服务的启/停、定时任务、设备自动挂载、网络配置、虚拟内存配置等。
以下是一些基本概念和原理:
- Unit:将每个系统资源称为一个Unit。Unit是Systemd管理系统资源的基本单位。使用一个Unit File作为Unit的单元文件,Systemd通过单元文件控制Unit的启动。例如,MySQL服务被Systemd视为一个Unit,使用一个mysql.service作为启动配置文件Unit File。
- Target:Target是Systemd中的一个高级概念,它代表了一个或多个Unit的集合。Target可以用来控制一组相关的Unit如何启动和停止。例如,一个Web服务器可能由多个后台进程组成,这些进程都属于同一个Target。
- Service:Service是Systemd中最常用的概念之一,它代表了一个可执行文件或者脚本,并且可以被控制是否启动、停止以及重启等操作。Service通常使用systemd-run命令来启动,并且可以通过systemctl命令进行管理和监控。
- Timer:Timer是一个特殊的Target,它可以用来执行定时任务。Timer可以使用crontab格式的时间表来设置任务执行时间,并且可以通过systemd-timesyncd服务来进行同步和校准。
systemd是一个Linux系统基础组件的集合,提供了一个系统和服务管理器,运行为PID 1并负责启动其它程序。Systemd可以管理所有系统资源,不同的资源统称为Unit(单位)。在Systemd的生态圈中,Unit文件统一了过去各种不同系统资源配置格式,例如服务的启/停、定时任务、设备自动挂载、网络配置、虚拟内存配置等。而Systemd通过不同的文件后缀来区分这些配置文件。
以下是一些常用的systemd单元文件类型:
- .service:服务单元文件,用于定义一个服务的行为。
- .socket:套接字单元文件,用于定义一个套接字的行为。
- .timer:定时器单元文件,用于定义一个定时器的行为。
- .mount:挂载点单元文件,用于定义一个挂载点的行为。
- .automount:自动挂载点单元文件,用于控制自动挂载文件系统。
命令:
systemctl是Systemd的命令行工具,用于控制和管理Systemd系统和服务管理器。使用systemctl,可以启动、停止、重新加载、重启服务、列出服务单元、检查服务状态、启用/禁用服务、管理运行级别和电源管理等操作。
以下是一些常用的systemctl命令:
- start:启动一个或多个Unit。
- stop:停止一个或多个Unit。
- restart:重启一个或多个Unit。
- status:显示一个或多个Unit的状态。
- enable:启用一个或多个Unit。
- disable:禁用一个或多个Unit。
- list-units:列出所有已加载的Unit。
- list-unit-files:列出所有可用的Unit文件。
systemd的配置文件存在于以下三个文件夹中:
1. /etc/systemd/system :存放系统启动的默认级别及启动的unit的软连接,优先级最高。
2. /run/systemd/system :存放用户自定义的服务单元文件。
3. /usr/lib/systemd/system :存放用户自定义的服务单元文件。
redis.service例子:
[Unit]
Description=Redis In-Memory Data Store
After=network.target
Documentation=man:redis-server(1)
[Service]
ExecStart=/usr/local/bin/redis-server /etc/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always
User=root
Group=root
EnvironmentFile=/etc/default/redis
LimitNOFILE=65536
TimeoutSec=0
StandardOutput=null
StandardError=inherit
SendSIGKILL=no
KillMode=process
PrivateTmp=true
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE
[Install]
WantedBy=multi-user.target