前言
记录汇总一下 systemd的相关操作和写法
https://wiki.archlinuxcn.org/wiki/Systemd archWiki中systemd文档
https://man.archlinux.org/man/systemctl.1 systemctl 详解
https://man.archlinux.org/man/systemd.unit.5 systemd unit文档
systemctl
本机通过ssh控制远程systemd systemctl -H 用户名@主机名 status <服务名> ?学到了 6
命令 & 选项 |
作用 |
使用场景/额外说明 |
systemctl start <服务名> |
启动指定服务 |
当需要手动启动某个服务时使用。 |
systemctl stop <服务名> |
停止指定服务 |
当需要关闭某个正在运行的服务时使用。 |
systemctl restart <服务名> |
重启服务 |
当修改了服务配置文件或遇到服务故障需重新加载时使用。 |
systemctl reload <服务名> |
重新加载配置而不重启服务 |
当仅修改了服务配置,希望立即应用新配置但不中断服务时使用。 |
systemctl status <服务名> |
查看服务状态及日志 |
用于诊断服务问题,查看服务是否正常运行及最近的日志输出。 |
systemctl enable <服务名> |
开机自启服务 |
设置服务在系统启动时自动启动。 |
systemctl disable <服务名> |
取消开机自启 |
如果不再需要服务自动启动,使用此命令取消。 |
systemctl daemon-reload |
重载 systemd 配置 |
当修改了服务单元文件后,需执行此命令让 systemd 重新读取配置。 |
systemctl list-units --type=service |
列出所有服务状态 |
快速查看系统中所有服务的当前状态。 |
systemctl list-unit-files |
查看所有服务的启动配置 |
查看哪些服务设为启用或禁用。 |
systemctl is-active <服务名> |
检查服务是否正在运行 |
快速确认服务状态。 |
systemctl is-enabled <服务名> |
检查服务是否设置为启用 |
确认服务是否配置为开机启动。 |
systemctl mask <服务名> |
禁用并阻止服务启动 |
强制禁用服务,通过创建符号链接到 /dev/null 实现。 |
systemctl unmask <服务名> |
解除服务的屏蔽 |
恢复被 mask 命令禁止的服务。 |
systemctl edit <服务名> |
在编辑器中直接修改服务配置 |
方便地编辑服务单元文件,没有文件则创建新的 drop-in 文件。 |
systemctl cat <服务名> |
查看服务配置文件内容 |
不直接修改,仅查看服务的配置信息。 |
systemctl show <服务名> |
显示服务详细属性 |
包括依赖关系、环境变量、单元文件路径等详细信息。 |
systemctl kill <服务名> --signal=<信号> |
发送信号给服务进程 |
如 SIGTERM 优雅终止,SIGHUP 重新加载配置。 |
systemctl --failed |
列出启动失败的服务 |
快速定位系统启动过程中未能成功启动的服务。 |
unit
unit搜索目录
1 2 3 4 5 6 7 8 9 10 11 12
| /etc/systemd/system.control/* /run/systemd/system.control/* /run/systemd/transient/* /run/systemd/generator.early/* /etc/systemd/system/* /etc/systemd/system.attached/* /run/systemd/system/* /run/systemd/system.attached/* /run/systemd/generator/* ... /usr/lib/systemd/system/* /run/systemd/generator.late/*
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| ~/.config/systemd/user.control/* $XDG_RUNTIME_DIR/systemd/user.control/* $XDG_RUNTIME_DIR/systemd/transient/* $XDG_RUNTIME_DIR/systemd/generator.early/* ~/.config/systemd/user/* $XDG_CONFIG_DIRS/systemd/user/* /etc/systemd/user/* $XDG_RUNTIME_DIR/systemd/user/* /run/systemd/user/* $XDG_RUNTIME_DIR/systemd/generator/* $XDG_DATA_HOME/systemd/user/* $XDG_DATA_DIRS/systemd/user/* ... /usr/lib/systemd/user/* $XDG_RUNTIME_DIR/systemd/generator.late/*
|
unit类型
Unit 类型 |
描述 |
.service |
服务单元,代表系统服务,如守护进程。 |
.target |
目标单元,作为一组单元的集合,实现运行级别概念。 |
.path |
路径单元,监控文件或目录变化,触发动作。 |
.timer |
定时单元,按照时间计划触发其他Unit。 |
.mount |
挂载单元,管理文件系统的挂载。 |
.automount |
自动挂载单元,访问时自动挂载文件系统。 |
.swap |
交换单元,管理交换空间。 |
.device |
设备单元,表示硬件设备。 |
.socket |
套接字单元,监听网络或本地套接字。 |
.slice |
临时文件集单元,组织和管理系统资源(cgroups)。 |
.job |
作业单元,表示由systemd发起的任务。 |
.conf |
配置单元,覆盖或补充其他Unit的配置。 |
.scope |
范围单元,不由systemd直接管理的进程组。 |
.netdev |
网络设备单元,配置网络设备。 |
.network |
网络接口单元,配置网络接口。 |
.link |
链接单元,网络链接命名规则。 |
.snapshot |
快照单元,系统状态的快照,支持回滚。 |
.seat |
坐席单元,物理或逻辑终端座位。 |
.session |
会话单元,表示用户会话。 |
.listen |
监听单元,监听特定事件或条件(较少见)。 |
unit 内容字段说明
[Unit]
部分字段说明
字段 |
说明 |
Description |
单元的简短描述文本。 |
After /Before |
控制启动顺序,After 指本单元应晚于列出单元启动,Before 则相反。 |
Requires |
指定必需的依赖单元,这些单元必须启动成功本单元才能启动。 |
Wants |
推荐的依赖单元,这些单元启动或失败不影响本单元启动。 |
Conflicts |
与本单元冲突的单元,这些单元启动时本单元将被停止。 |
BindsTo |
本单元与指定单元绑定,它们的生命周期相互关联。 |
[Service]
部分字段说明
字段 |
说明 |
Type |
服务类型,如 simple , forking , oneshot 等。 |
ExecStart |
启动服务的命令。 |
ExecStop |
停止服务的命令。 |
Restart |
重启策略,如 always , on-failure , no 。 |
User |
以指定用户身份运行服务。 |
Group |
以指定组身份运行服务。 |
WorkingDirectory |
服务的工作目录。 |
[Socket]
部分字段说明
字段 |
说明 |
ListenStream |
监听的TCP端口或Unix域套接字路径。 |
ListenDatagram |
监听的UDP端口或Unix域套接字路径。 |
BindToDevice |
将套接字绑定到特定的网络设备。 |
[Timer]
部分字段说明
字段 |
说明 |
OnCalendar |
定时触发的时间规则,如 *-*-* *:*:* 表示每天每分钟。 |
AccuracySec |
触发的准确度,即最小触发间隔。 |
RandomizedDelaySec |
触发延迟的随机化秒数,减少同时启动压力。 |
[Mount]
部分字段说明
字段 |
说明 |
What |
挂载源路径,如设备文件名。 |
Where |
挂载点路径。 |
Type |
文件系统类型,如 ext4 , nfs 。 |
Options |
挂载选项,如 ro , noatime 。 |
[Install]
部分字段说明
字段 |
说明 |
WantedBy |
本单元希望加入的目标单元,如 multi-user.target 。 |
RequiredBy |
需要本单元的目标单元,这些单元启动时本单元也必须启动。 |
常用的unit文件demo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| [Unit] Description=My Application Service After=network.target
[Service] Type=simple ExecStart=/usr/local/bin/myapp start ExecStop=/usr/local/bin/myapp stop Restart=always User=myappuser Group=myappgroup WorkingDirectory=/var/lib/myapp
[Install] WantedBy=multi-user.target
|
1 2 3 4 5 6 7 8 9
| [Unit] Description=Daily Cleanup Task
[Timer] OnCalendar=*-*-* 00:00:00 Persistent=true
[Install] WantedBy=timers.target
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| [Unit] Description=Monitor Log File for Changes
[Path] PathChanged=/var/log/application.log
[Install] WantedBy=multi-user.target
[Unit] Description=Log Watch Action
[Service] Type=oneshot ExecStart=/usr/local/bin/logwatcher /var/log/application.log
[Install] WantedBy=logwatch.path
|
1 2 3 4 5 6 7 8
| [Unit] Description=Auto Mount for Data Disk
[Automount] Where=/mnt/data
[Install] WantedBy=multi-user.target
|
1 2 3 4 5 6 7 8 9 10 11
| [Unit] Description=Data Disk Mount
[Mount] What=/dev/sdb1 Where=/mnt/data Type=ext4 Options=noatime
[Install] WantedBy=multi-user.target
|
个人常用记录
/usr/lib/systemd/system/alist.service
1 2 3 4 5 6 7 8 9 10 11 12
| [Unit] Description=alist After=network.target [Service] Type=simple WorkingDirectory=/home/ming/alist ExecStart=/home/ming/alist/alist server Restart=on-failure [Install] WantedBy=multi-user.target
|
总结
systemd 成为linux下的标准事实了 没啥好说的
重量级 不过用起来简单
常用的 也就service timer