Systemd 作为现代 Linux 系统的核心初始化系统,除了管理服务外,还有许多令人惊讶的进阶用法。以下是三个非常规但实用的案例:
场景:用 systemd 实现精准的定时任务,支持微秒级精度和依赖管理。 ```bash # 创建定时单元文件 /etc/systemd/system/my-task.timer [Unit] Description=Run my backup daily
[Timer] OnCalendar=--* 03:00:00 # 每天凌晨3点 Persistent=true # 补执行错过任务 Unit=my-task.service
[Install] WantedBy=timers.target
# 对应的服务文件 /etc/systemd/system/my-task.service
[Service]
Type=oneshot
ExecStart=/path/to/backup-script.sh
```
优势:
- 支持日历表达式 (OnCalendar=Mon,Fri 16:00
)
- 可限制任务资源(CPU/Memory)
- 通过 systemctl list-timers
查看任务状态
场景:启动时自动解压资源包到内存盘(tmpfs),实现高性能临时目录。 ```bash # /etc/systemd/system/tmp-archive.service [Unit] Description=Unpack assets to tmpfs Before=nginx.service
[Service] Type=oneshot ExecStartPre=/bin/mkdir -p /mnt/volatile-assets ExecStart=/bin/tar -xzf /opt/assets.tar.gz -C /mnt/volatile-assets ExecStop=/bin/rm -rf /mnt/volatile-assets/* RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
```
技巧:
- 结合 tmpfs.mount
单元实现自动挂载
- 适合高频读取的静态资源(如网页模板)
场景:为单个服务创建命名空间隔离,无需完整容器。
bash
# /etc/systemd/system/sandboxed.service
[Service]
ExecStart=/usr/bin/python3 /opt/untrusted_app.py
PrivateTmp=yes # 独立/tmp
PrivateDevices=yes # 隐藏物理设备
ProtectSystem=strict # 只读系统目录
ReadWritePaths=/var/lib/appdata # 允许写入的路径
CapabilityBoundingSet=CAP_NET_BIND_SERVICE # 最小权限
安全增强:
- 使用 SystemCallFilter
限制系统调用
- 通过 IPAddressDeny=
限制网络访问
- 比传统 chroot 更轻量级
systemd-analyze critical-chain nginx.service
systemd-analyze dot nginx.service | dot -Tsvg > graph.svg
systemd-run --unit=test /path/to/cmd
+ journalctl -u test
这些用法展示了 systemd 作为系统管理"瑞士军刀"的灵活性,远超传统 init 系统的能力边界。