关于 linux-systemd
linux-systemd 是面向 Linux 系统管理员的 OpenClaw 技能,用于自动化管理基于 systemd 的服务。它涵盖单元配置、服务控制、日志、cgroups 和套接字激活。
主要功能
- 01管理服务、套接字和定时器单元
- 02启动、停止和重启服务
- 03使用 journalctl 查询单元日志
- 04通过 cgroups 设置资源限制
- 05配置套接字激活
适用场景
- 01将 OpenClaw 作为 systemd 服务运行
- 02跟踪日志以诊断服务问题
- 03为服务设置 CPU 限额
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ alphaonedev/ openclaw-graph --skill linux-systemd安装后在 Claude Code 中输入/linux-systemd确认已加载。
详细介绍
linux-systemd
用途
此技能提供用于管理 Linux 上 systemd 的工具,重点涵盖服务单元、系统控制、日志记录,以及 cgroups 和套接字激活等集成功能,专用于管理 OpenClaw 服务。
使用场景
当你需要自动执行 Linux 服务操作时,可使用此技能,例如启动或停止守护进程、监控日志,或通过 cgroups 优化资源使用。可将其用于系统管理脚本、容器编排,或将 OpenClaw 集成为 systemd 服务。请勿在 BSD 等非 systemd 系统或自定义 init 配置中使用。
核心功能
- 管理服务、套接字和定时器的 systemd 单元文件,包括编辑 /etc/systemd/system/ 中的文件。
- 通过 systemctl 命令控制服务,例如启动、停止和重启单元。
- 使用 journalctl 查询特定单元的实时或历史输出日志。
- 集成 cgroups 以限制资源,例如对服务设置 CPU/内存限制。
- 启用套接字激活,按需启动服务,从而降低资源开销。
- 将 OpenClaw 作为 systemd 服务运行:创建单元文件,并将 ExecStart 指向 OpenClaw 二进制文件。
使用模式
始终使用 sudo 或以 root 身份运行命令。在脚本中,使用 Python 的 subprocess 调用,或在 Bash 中使用 shell exec 来执行 systemctl/journalctl。创建单元文件时,可直接编辑文件,或使用 systemd-analyze 进行验证。将 OpenClaw 集成时,确保服务单元引用正确的二进制文件路径和环境变量。建议按以下模式组织:先检测服务状态,再执行操作,并记录输出。对于 cgroups,请在重新加载 systemd 之前,在单元文件的 [Service] 部分指定限制。
常用命令/API
使用 systemctl 管理服务,例如,使用 systemctl start <unit> 启动服务。查看日志时,运行 journalctl -u <unit> -f 以持续跟踪输出。要重启服务,可使用 systemctl restart <unit> --no-block 执行非阻塞操作。对于 cgroups,可使用 systemctl status <unit> | grep CGroup 检查,或通过单元文件设置。设置套接字激活:在单元文件中添加 Sockets=,然后使用 systemctl start <socket-unit>。Bash 代码片段:
#!/bin/bash
systemctl stop my-service
systemctl start my-service
echo "Service restarted"
在 Python 中,使用:
import subprocess
subprocess.run(['systemctl', 'status', 'my-service'])
对于 OpenClaw 服务,可创建如下单元文件:
[Unit]
Description=OpenClaw Service
[Service]
ExecStart=/usr/bin/openclaw --config /etc/openclaw/config.json
集成说明
要集成 cgroups,请在单元文件的 [Service] 部分添加 CPUQuota=50% 等配置,然后运行 systemctl daemon-reload 并重启单元。要启用套接字激活,请定义一个 .socket 单元文件(例如,ListenStream=12345),并将其关联到服务单元。将 OpenClaw 作为服务管理时,请在单元文件中设置环境变量,例如 Environment="OPENCLAW_API_KEY=$SERVICE_API_KEY",并确保通过在 shell 中使用 export 或使用 systemd 环境文件来设置 $SERVICE_API_KEY。更改后,使用 systemctl daemon-reload 重新加载 systemd。为避免冲突,请使用 systemctl list-units --type=service 检查是否已有单元。
错误处理
始终检查命令退出码;例如,在 Bash 中使用 if systemctl start <unit>; then echo "Success"; else echo "Failed: $?"; fi。在 Python 中,将 subprocess 调用封装在 try-except 块中:try: subprocess.run([...], check=True) except subprocess.CalledProcessError as e: print(f"Error: {e.returncode}")。常见错误包括 "Failed to start unit"(检查权限或依赖项)和 "Unit not found"(使用 systemctl list-units 确认单元名称)。对于 journalctl,若没有日志,可使用 journalctl -u <unit> --since "1 hour ago",并解析输出以查找错误。如果 cgroups 未生效,可使用 systemctl status <unit> 调试限制,并通过 cat /proc/cgroups 确认内核支持。
具体用法示例
示例 1:启动并监控 OpenClaw 服务。首先,在 /etc/systemd/system/openclaw.service 创建一个单元文件,内容如下:
[Unit]
Description=OpenClaw Daemon
[Service]
ExecStart=/usr/bin/openclaw
然后,运行:systemctl daemon-reload; systemctl start openclaw; journalctl -u openclaw -f,以启动服务并持续查看日志。
示例 2:在 cgroup 限制下重启服务。编辑单元文件,加入 [Service] CPUQuota=30%,然后执行:systemctl daemon-reload; systemctl restart my-service。运行 systemctl status my-service | grep CGroup 确认已应用 CPU 限制。
图关系
- 连接到:linux 集群(例如,与文件管理或进程控制等其他 linux 技能共享依赖项)。
- 通过标签关联:systemd(直接关联)、services(例如,关联到容器或编排技能)、linux(广泛的集群关联)、units(关联到资源管理技能)。
- 集成点:cgroup(连接到性能监控工具)、socket activation(关联到网络技能)。