本文共 3895 字,大约阅读时间需要 12 分钟。
Systemd命令详解
Systemd是一个强大而复杂的系统管理命令组,用于管理Linux系统的启动、服务、日志、定时任务等多个方面。其核心命令是systemctl,功能强大且易于使用,但也因复杂性和耦合性受到部分人的反对。本文将详细介绍systemctl的语法、参数、常用命令以及如何配置和使用Systemd服务。
Systemd的背景
在传统的Linux系统中,启动服务主要依赖init进程,其启动方式存在两个主要问题:启动时间较长且复杂。Systemd(System Daemon,守护进程守护者)由Red Hat开发,旨在解决这些问题。Systemd作为第一个进程(PID=1),取代了传统的initd,提供了一套完整的系统管理解决方案。
Systemctl命令语法
Systemctl命令的基本语法格式如下:
systemctl [OPTIONS...] {COMMAND} ... 常用选项参数
以下是Systemctl常用的参数和选项:
-t, --type:指定单元类型,可选值包括service、socket、mount、automount等。 --state:指定单元的状态,可选值包括active、failed、stopped等。 -p, --property:限制显示特定属性,如MainPID、EnvFile等。 -a, --all:显示所有加载的单元。 -r, --recursive:显示本地容器的单元。 --reverse:显示反向依赖关系。 --after、--before:显示依赖关系的单元。 -l, --full:不省略状态信息。 --show-types:显示套接字类型。 -i, --ignore-inhibitors:忽略抑制器锁。 -q, --quiet:禁止输出某些命令结果。 --no-block:不等待操作完成。 --root:指定备用根路径。 --failed:显示失败状态的单元。 --no-wall:不发送墙消息。 --global:全局启用或禁用用户配置。 --no-reload:不重新加载守护程序配置。 --no-ask-password:禁用密码查询。
Unit Commands(单元命令)
Systemctl支持多种命令用于管理单元:
list-units [PATTERN...]:列出已知单元。 list-sockets [PATTERN...]:列出套接字单元。 list-timers [PATTERN...]:列出计时器单元。 start PATTERN...:启动指定单元。 stop PATTERN...:停止指定单元。 reload PATTERN...:重新加载配置。 restart PATTERN...:重新启动指定单元。 is-active PATTERN...:检查单元是否运行。 is-failed PATTERN...:检查单元是否失败。 status [PATTERN...|PID]:显示单元状态和日志。 show [PATTERN...|JOB]:显示单元属性。 cat PATTERN...:显示单元文件。 set-property NAME=VALUE...:设置单元属性。 help PATTERN...|PID:查看单元手册页。 reset-failed:重置单元失败状态。 list-dependencies NAME:显示单元依赖关系。 list-unit-files [PATTERN...]:列出已安装的单元文件。
Unit File Commands(单元文件命令)
enable NAME...:启用单元文件。 disable NAME...:禁用单元文件。 is-enabled NAME...:检查单元是否启用。 reenable NAME...:重新启用单元。 preset NAME...:重置单元为预设默认值。 preset-all:重置所有单元为预设默认值。 mask NAME...:屏蔽单元文件。 link FILENAME...:创建单元文件符号链接。 get-default:获取默认目标单元。 set-default NAME:设置默认目标单元。
Machine Commands(机器命令)
list-machines [PATTERN...]:列出主机和容器。
Job Commands(作业命令)
list-jobs [PATTERN...]:列出正在进行的作业。 cancel JOB...:取消作业。
Snapshot Commands(快照命令)
snapshot [NAME]:创建快照。 delete PATTERN...:删除快照。
Environment Commands(环境命令)
show-environment:显示系统d环境块。 set-environment VARIABLE=VALUE...:设置环境变量。 unset-environment VARIABLE...:取消环境变量。 import-environment VARIABLE...:导入环境变量。
Manager Lifecycle Commands(管理器生命周期命令)
daemon-reload:重新加载守护程序配置。 daemon-reexec:重新执行守护程序。
System Commands(系统命令)
is-system-running:检查系统是否运行。 default:进入默认模式。 rescue:进入救援模式。 emergency:进入紧急模式。 halt:关闭系统。 poweroff:关闭并关闭电源。 reboot:重启系统。 kexec:通过kexec重启系统。 exit:退出系统。 suspend:挂起系统。 hibernate:休眠系统。 hybrid-sleep:休眠并挂起系统。 switch-root ROOT [INIT]:切换到另一个根目录。
Unit文件配置
Systemd通过多种Unit文件类型(如.service、.socket、.timer等)管理系统资源。以下是常用Unit文件类型:
.service:封装守护进程服务。 .socket:监控网络套接字。 .timer:执行定时任务。 .automount:自动挂载文件系统。 .device:管理设备设备节点。 .mount:定义文件系统挂载点。 .path:监控目录变化。 .swap:管理交换分区。 .scope:系统服务分组。 .target:逻辑分组,定义启动依赖。
配置目录
Unit文件应放置在以下目录中,优先级依次为:
/etc/systemd/system /run/systemd/system /usr/lib/systemd/system
Service文件字段
Unit段:包含单元描述、依赖关系等。 Install段:定义单元在启动时的依赖关系。 Service段:包含服务配置,如启动命令、重启策略、环境变量等。
文件示例
以下是一个典型的.service文件示例:
[Unit]Description=OpenBSD Secure Shell serverAfter=network.target auditd.serviceConditionPathExists=!/etc/ssh/sshd_not_to_be_run[Service]EnvironmentFile=-/etc/default/sshExecStartPre=/usr/sbin/sshd -tExecStart=/usr/sbin/sshd -D $SSHD_OPTSExecReload=/usr/sbin/sshd -tExecReload=/bin/kill -HUP $MAINPIDKillMode=processRestart=on-failureRestartPreventExitStatus=255RuntimeDirectory=sshdRuntimeDirectoryMode=0755[Install]WantedBy=multi-user.targetAlias=sshd.service
示例命令
启用Nginx服务:systemctl enable nginx.service
查询服务状态:systemctl is-enabled nginx.service
禁用Nginx服务:systemctl disable nginx.service
启动服务:systemctl start nginx.service
停止服务:systemctl stop nginx.service
重新启动服务:systemctl restart nginx.service
重新加载服务配置:systemctl reload nginx.service
查询服务运行状态:systemctl status nginx.service
显示启动失败的服务:systemctl --failed
重置单元频率计数器:systemctl reset-failed
重新加载所有修改过的服务配置:systemctl daemon-reload
通过以上命令,可以方便地管理Linux系统的服务和资源,Systemctl作为一款强大而灵活的工具,为系统管理员提供了全面而便捷的系统管理解决方案。
转载地址:http://sqckz.baihongyu.com/