【基础】每天掌握一个Linux命令 - systemctl
目录
- 工具概述
- 安装方式
- 核心功能
- 基础用法
- systemctl常用参数
- 服务管理参数
- 服务状态参数
- 服务开机启动参数
- 服务列表参数
- 系统控制参数
- 依赖关系参数
- 目标单元参数
- 重载参数
- 其他常用参数
- systemctl 服务单元文件详解
- 服务单元文件的基本结构
- `[Unit]` 部分常用字段
- `[Service]` 部分常用字段
- `[Install]` 部分常用字段
- 服务类型 (`Type`) 详解
- 重启策略 (`Restart`) 详解
- 单元文件示例
- 创建和修改单元文件
- 注意事项
【基础】每天掌握一个Linux命令 - systemctl
在Linux系统中,服务管理是一项重要且频繁的工作,比如启动、停止、重启服务,查看服务状态等。systemctl命令就像系统服务的“全能管家”,能高效处理这些任务,无论是日常运维,还是应对生产环境的服务管理需求,都能轻松搞定。
工具概述
systemctl是systemd系统和服务管理器的命令行工具,systemd是Linux系统中用于初始化系统的程序,取代了传统的init。systemctl可以用来管理系统服务、查看系统状态、控制系统资源等,它提供了统一的接口来管理服务的启动、停止、重启、状态查询等操作,极大地提高了服务管理的效率和便利性。
安装方式
在大多数现代Linux发行版(如CentOS 7+、Ubuntu 16.04+、Debian 8+等)中,systemd和systemctl是默认安装的,无需额外安装。如果系统没有安装systemd,可根据不同发行版使用对应的包管理工具进行安装:
- Debian/Ubuntu:
sudo apt-get install systemd
- CentOS/RHEL:
sudo yum install systemd
核心功能
功能类型 | 功能描述 |
---|---|
服务管理 | 对系统服务进行启动、停止、重启、重载配置、设置开机自启等操作 |
系统控制 | 控制系统关机、重启、休眠、唤醒等状态 |
状态查询 | 查看系统状态、服务状态、系统日志等信息 |
资源管理 | 管理系统资源,如挂载点、交换空间等 |
基础用法
好的,我将为你详细介绍systemctl的常用参数及其使用方法。这些参数可以帮助你更灵活地管理系统服务和资源。
systemctl常用参数
服务管理参数
参数 | 描述 | 示例 |
---|---|---|
start | 启动指定服务 | systemctl start nginx |
stop | 停止指定服务 | systemctl stop nginx |
restart | 重启指定服务 | systemctl restart nginx |
reload | 重新加载服务配置(不中断服务) | systemctl reload nginx |
reload-or-restart | 优先重新加载配置,失败则重启服务 | systemctl reload-or-restart nginx |
try-restart | 仅在服务运行时重启(避免启动已停止的服务) | systemctl try-restart nginx |
服务状态参数
参数 | 描述 | 示例 |
---|---|---|
status | 显示服务详细状态 | systemctl status nginx |
is-active | 检查服务是否正在运行 | systemctl is-active nginx |
is-failed | 检查服务是否失败 | systemctl is-failed nginx |
show | 显示服务的所有属性 | systemctl show nginx |
show -p Property | 显示特定属性值 | systemctl show -p ExecStart nginx |
服务开机启动参数
参数 | 描述 | 示例 |
---|---|---|
enable | 设置服务开机自启 | systemctl enable nginx |
disable | 禁用服务开机自启 | systemctl disable nginx |
is-enabled | 检查服务是否开机自启 | systemctl is-enabled nginx |
reenable | 重新启用服务(重新创建链接) | systemctl reenable nginx |
preset | 根据发行版策略设置服务状态 | systemctl preset nginx |
服务列表参数
参数 | 描述 | 示例 |
---|---|---|
list-units | 列出所有活动单元 | systemctl list-units |
list-units --type=service | 仅列出服务单元 | systemctl list-units --type=service |
list-units --type=target | 仅列出目标单元 | systemctl list-units --type=target |
list-units --all | 列出所有单元(包括非活动的) | systemctl list-units --all |
list-unit-files | 列出所有单元文件 | systemctl list-unit-files |
系统控制参数
参数 | 描述 | 示例 |
---|---|---|
poweroff | 关闭系统 | systemctl poweroff |
reboot | 重启系统 | systemctl reboot |
halt | 停止系统 | systemctl halt |
suspend | 挂起系统(睡眠模式) | systemctl suspend |
hibernate | 休眠系统(磁盘休眠) | systemctl hibernate |
hybrid-sleep | 混合睡眠(同时休眠和挂起) | systemctl hybrid-sleep |
emergency | 进入紧急模式 | systemctl emergency |
rescue | 进入救援模式 | systemctl rescue |
依赖关系参数
参数 | 描述 | 示例 |
---|---|---|
list-dependencies | 显示单元的依赖关系 | systemctl list-dependencies nginx |
list-dependencies --reverse | 显示反向依赖关系 | systemctl list-dependencies --reverse nginx |
list-dependencies --after | 显示在指定单元后启动的单元 | systemctl list-dependencies --after nginx |
list-dependencies --before | 显示在指定单元前启动的单元 | systemctl list-dependencies --before nginx |
目标单元参数
参数 | 描述 | 示例 |
---|---|---|
get-default | 显示默认运行级别 | systemctl get-default |
set-default | 设置默认运行级别 | systemctl set-default multi-user.target |
isolate | 切换到指定运行级别 | systemctl isolate graphical.target |
重载参数
参数 | 描述 | 示例 |
---|---|---|
daemon-reload | 重新加载systemd管理器配置 | systemctl daemon-reload |
daemon-reexec | 重新执行systemd进程 | systemctl daemon-reexec |
其他常用参数
参数 | 描述 | 示例 |
---|---|---|
mask | 禁用并阻止服务启动 | systemctl mask nginx |
unmask | 取消服务屏蔽 | systemctl unmask nginx |
reset-failed | 重置失败的服务状态 | systemctl reset-failed nginx |
kill | 向服务发送信号 | systemctl kill -s SIGTERM nginx |
cat | 显示单元文件内容 | systemctl cat nginx |
edit | 编辑单元文件(创建覆盖文件) | systemctl edit nginx |
add-wants | 添加启动依赖 | systemctl add-wants multi-user.target nginx |
add-requires | 添加必需依赖 | systemctl add-requires multi-user.target nginx |
这些参数涵盖了systemctl的主要功能,可以帮助你高效管理Linux系统中的服务和资源。根据实际需求选择合适的参数组合使用,能够满足各种复杂的系统管理场景。
systemctl 服务单元文件详解
服务单元文件(.service 文件)是 systemd 管理服务的核心配置文件,理解其各个字段的含义和作用对于系统管理至关重要。下面我将详细解释这些字段的用途和配置方法。
服务单元文件的基本结构
服务单元文件分为三个主要部分:
[Unit]
:通用配置,定义单元的描述、依赖关系和条件[Service]
:服务特定配置,定义服务的启动方式、运行参数等[Install]
:安装配置,定义服务如何安装(如开机自启)
[Unit]
部分常用字段
字段 | 描述 | 示例 |
---|---|---|
Description | 服务的简短描述 | Description=The NGINX HTTP and reverse proxy server |
Documentation | 服务的文档链接 | Documentation=man:nginx(8) http://nginx.org/en/docs/ |
After | 指定服务启动顺序(在哪些服务后启动) | After=network.target remote-fs.target nss-lookup.target |
Before | 指定服务启动顺序(在哪些服务前启动) | Before=httpd.service |
Wants | 弱依赖关系(依赖服务启动失败不影响当前服务) | Wants=network-online.target |
Requires | 强依赖关系(依赖服务启动失败则当前服务也失败) | Requires=network.target |
Conflicts | 冲突关系(不能与指定服务同时运行) | Conflicts=apache2.service |
ConditionPathExists | 条件检查(路径存在时才启动服务) | ConditionPathExists=/etc/nginx/nginx.conf |
AssertPathExists | 断言检查(路径不存在则服务启动失败) | AssertPathExists=/usr/sbin/nginx |
[Service]
部分常用字段
字段 | 描述 | 示例 |
---|---|---|
Type | 服务类型,决定启动方式 | Type=forking |
ExecStart | 启动服务的命令 | ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf |
ExecStartPre | 启动前执行的命令 | ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf |
ExecStartPost | 启动后执行的命令 | ExecStartPost=/usr/bin/rm -f /run/nginx.pid.lock |
ExecStop | 停止服务的命令 | ExecStop=/usr/sbin/nginx -s stop |
ExecStopPost | 停止后执行的命令 | ExecStopPost=/usr/bin/rm -f /run/nginx.pid |
ExecReload | 重新加载配置的命令 | ExecReload=/usr/sbin/nginx -s reload |
Restart | 何时重启服务 | Restart=on-failure |
RestartSec | 重启前等待的时间 | RestartSec=5 |
PIDFile | PID文件路径 | PIDFile=/run/nginx.pid |
TimeoutSec | 启动/停止超时时间 | TimeoutSec=300 |
Environment | 设置环境变量 | Environment=NGINX_CONF_D=/etc/nginx/conf.d |
User | 运行服务的用户 | User=nginx |
Group | 运行服务的用户组 | Group=nginx |
WorkingDirectory | 工作目录 | WorkingDirectory=/var/www/html |
LimitNOFILE | 文件描述符限制 | LimitNOFILE=10240 |
PrivateTmp | 是否使用独立的临时目录 | PrivateTmp=true |
ProtectSystem | 保护系统文件 | ProtectSystem=full |
NoNewPrivileges | 禁止获取新权限 | NoNewPrivileges=true |
[Install]
部分常用字段
字段 | 描述 | 示例 |
---|---|---|
WantedBy | 定义服务如何被启用(弱依赖) | WantedBy=multi-user.target |
RequiredBy | 定义服务如何被启用(强依赖) | RequiredBy=nginx.service |
Alias | 服务的别名 | Alias=webserver.service |
Also | 启用此服务时同时启用的其他服务 | Also=nginx-common.service |
服务类型 (Type
) 详解
服务类型决定了 systemd 如何启动和监控服务:
类型 | 描述 | 适用场景 |
---|---|---|
simple | 默认值,直接启动主进程 | 直接执行单一命令的服务 |
forking | 服务在后台运行(通过 fork()) | 传统守护进程(如 Apache、Nginx) |
oneshot | 一次性任务,执行后退出 | 系统初始化脚本、备份任务 |
dbus | 通过 D-Bus 注册启动 | 需要 D-Bus 通信的服务 |
notify | 通过 sd_notify() 通知启动完成 | 使用 systemd 通知 API 的服务 |
idle | 所有任务完成后才启动 | 低优先级服务 |
重启策略 (Restart
) 详解
策略 | 描述 |
---|---|
no | 默认值,不重启服务 |
on-success | 仅在正常退出时重启 |
on-failure | 在异常退出时重启(如信号终止、超时等) |
on-abnormal | 在异常终止时重启(如信号终止) |
on-abort | 仅在程序崩溃时重启 |
on-watchdog | 仅在看门狗超时时重启 |
always | 无论如何都重启 |
单元文件示例
以下是一个典型的 Nginx 服务单元文件示例:
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/usr/sbin/nginx -s reload
ExecStop=/usr/sbin/nginx -s stop
PrivateTmp=true
User=nginx
Group=nginx
LimitNOFILE=10240[Install]
WantedBy=multi-user.target
这个配置文件定义了 Nginx 服务的基本属性、启动命令、依赖关系和安装方式。通过修改这些字段,你可以根据实际需求定制服务的行为。
创建和修改单元文件
要创建或修改服务单元文件,可以使用以下命令:
-
创建新的单元文件:
sudo systemctl edit --force --full <服务名>.service
-
修改现有单元文件(创建覆盖文件):
sudo systemctl edit <服务名>.service
-
修改完成后,重新加载 systemd 管理器:
sudo systemctl daemon-reload
-
查看单元文件的完整内容:
systemctl cat <服务名>.service
通过理解和正确配置服务单元文件,你可以更精细地控制服务的行为,提高系统的可靠性和安全性。
注意事项
- 使用systemctl命令需要root权限或通过sudo执行,否则会因权限不足导致操作失败。
- 重新加载配置(
reload
)和重启服务(restart
)有区别,reload
不会中断服务连接,适用于配置修改后无需重启服务的情况;restart
会先停止服务再启动,会造成短暂的服务中断。 - 在使用通配符管理多个服务时要谨慎,避免误操作影响到其他重要服务。
- 不同Linux发行版对systemctl命令的支持可能存在细微差异,操作前最好先在测试环境进行验证。