
Systemd
- 223 installs
- 50 repo stars
- Updated March 3, 2026
- chaterm/terminal-skills
Create, enable, and debug systemd units and timers on Linux servers for reliable service startup, restarts, logging, and failure recovery.
About
Guides terminal operations for systemd on Linux: write unit files, enable and restart services, inspect status, read journal logs, manage timers, and diagnose failed startups on production and staging machines.
- unit file authoring
- systemctl enable/start
- journalctl log inspection
- timer scheduling
- failed-service diagnosis
Systemd by the numbers
- 223 all-time installs (skills.sh)
- Ranked #383 of 1,435 DevOps & CI/CD skills by installs in the Skillselion catalog
- Data as of Jul 28, 2026 (Skillselion catalog sync)
npx skills add https://github.com/chaterm/terminal-skills --skill systemdAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 223 |
|---|---|
| repo stars | ★ 50 |
| Last updated | March 3, 2026 |
| Repository | chaterm/terminal-skills ↗ |
What it does
Create, enable, and debug systemd units and timers on Linux servers for reliable service startup, restarts, logging, and failure recovery.
Files
Systemd 服务管理
概述
Systemd 服务单元编写、依赖管理、日志查看等技能。
服务管理
基础命令
# 启停服务
systemctl start service-name
systemctl stop service-name
systemctl restart service-name
systemctl reload service-name # 重载配置(不中断服务)
# 开机启动
systemctl enable service-name
systemctl disable service-name
systemctl enable --now service-name # 启用并立即启动
# 查看状态
systemctl status service-name
systemctl is-active service-name
systemctl is-enabled service-name
systemctl is-failed service-name服务列表
# 列出所有服务
systemctl list-units --type=service
systemctl list-units --type=service --state=running
systemctl list-units --type=service --state=failed
# 列出所有单元文件
systemctl list-unit-files --type=service
# 查看依赖
systemctl list-dependencies service-name
systemctl list-dependencies --reverse service-name单元文件
文件位置
# 系统单元(包管理器安装)
/usr/lib/systemd/system/
# 管理员自定义
/etc/systemd/system/
# 运行时生成
/run/systemd/system/
# 优先级:/etc > /run > /usr/lib基础服务单元
# /etc/systemd/system/myapp.service
[Unit]
Description=My Application
Documentation=https://example.com/docs
After=network.target
Wants=network-online.target
[Service]
Type=simple
User=appuser
Group=appgroup
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/bin/start.sh
ExecStop=/opt/myapp/bin/stop.sh
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target服务类型
# simple(默认)- 主进程即服务进程
Type=simple
ExecStart=/usr/bin/myapp
# forking - 传统守护进程
Type=forking
PIDFile=/var/run/myapp.pid
ExecStart=/usr/bin/myapp -d
# oneshot - 一次性任务
Type=oneshot
ExecStart=/usr/bin/backup.sh
RemainAfterExit=yes
# notify - 服务就绪通知
Type=notify
ExecStart=/usr/bin/myapp环境变量
[Service]
# 直接设置
Environment="VAR1=value1" "VAR2=value2"
# 从文件加载
EnvironmentFile=/etc/myapp/env
EnvironmentFile=-/etc/myapp/env.local # - 表示可选
# 传递给子进程
PassEnvironment=HOME USER资源限制
[Service]
# 文件描述符
LimitNOFILE=65535
# 进程数
LimitNPROC=4096
# 内存限制
MemoryLimit=512M
MemoryMax=1G
# CPU 限制
CPUQuota=50%
# 超时设置
TimeoutStartSec=30
TimeoutStopSec=30安全选项
[Service]
# 用户隔离
User=appuser
Group=appgroup
DynamicUser=yes
# 文件系统保护
ProtectSystem=strict
ProtectHome=yes
ReadWritePaths=/var/lib/myapp
# 网络隔离
PrivateNetwork=yes
# 能力限制
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE
NoNewPrivileges=yes日志管理
journalctl
# 查看服务日志
journalctl -u service-name
journalctl -u service-name -f # 实时跟踪
journalctl -u service-name --since today
journalctl -u service-name --since "1 hour ago"
journalctl -u service-name -n 100 # 最后100行
# 按时间范围
journalctl --since "2024-01-01" --until "2024-01-02"
# 按优先级
journalctl -p err # 错误及以上
journalctl -p warning
# 输出格式
journalctl -u service-name -o json
journalctl -u service-name -o json-pretty
# 磁盘使用
journalctl --disk-usage
journalctl --vacuum-size=500M # 清理到500M
journalctl --vacuum-time=7d # 保留7天定时器
Timer 单元
# /etc/systemd/system/backup.timer
[Unit]
Description=Daily Backup Timer
[Timer]
OnCalendar=daily
OnCalendar=*-*-* 02:00:00 # 每天凌晨2点
Persistent=true # 错过的任务补执行
[Install]
WantedBy=timers.target# /etc/systemd/system/backup.service
[Unit]
Description=Backup Service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh定时器管理
# 启用定时器
systemctl enable --now backup.timer
# 查看定时器
systemctl list-timers
systemctl list-timers --all常见场景
场景 1:Node.js 应用
[Unit]
Description=Node.js Application
After=network.target
[Service]
Type=simple
User=node
WorkingDirectory=/opt/nodeapp
ExecStart=/usr/bin/node /opt/nodeapp/app.js
Restart=on-failure
RestartSec=10
Environment=NODE_ENV=production
Environment=PORT=3000
[Install]
WantedBy=multi-user.target场景 2:Java 应用
[Unit]
Description=Java Application
After=network.target
[Service]
Type=simple
User=java
ExecStart=/usr/bin/java -Xms512m -Xmx1024m -jar /opt/app/app.jar
SuccessExitStatus=143
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target场景 3:覆盖系统服务配置
# 创建覆盖目录
systemctl edit nginx
# 或手动创建
mkdir -p /etc/systemd/system/nginx.service.d/
cat > /etc/systemd/system/nginx.service.d/override.conf << EOF
[Service]
LimitNOFILE=65535
EOF
systemctl daemon-reload
systemctl restart nginx故障排查
| 问题 | 排查方法 |
|---|---|
| 服务启动失败 | systemctl status, journalctl -u |
| 依赖问题 | systemctl list-dependencies |
| 配置错误 | systemd-analyze verify service.service |
| 权限问题 | 检查 User/Group、文件权限 |
| 超时 | 调整 TimeoutStartSec |
# 重载配置
systemctl daemon-reload
# 分析启动时间
systemd-analyze
systemd-analyze blame
systemd-analyze critical-chain
# 验证单元文件
systemd-analyze verify /etc/systemd/system/myapp.service