深入探索systemd:从启动管理到定时任务
立即解锁
发布时间: 2025-08-13 00:28:07 阅读量: 1 订阅数: 7 

# 深入探索 systemd:从启动管理到定时任务
## 1. Linux 启动与 systemd 基础
在 Linux 系统中,systemd 承担着重要的启动管理职责。以 hello.service 为例,它在 network - online.target 达成后很快启动,这符合预期。在启动过程中,我们或许还能看到 “Hello World!” 消息一闪而过。
### 1.1 单元文件与启动顺序
将服务单元添加到 multi - user.target 或 graphical.target 中,无法明确其在启动序列中的位置。这两个启动目标及其依赖项基本并行启动。要确保单元按特定顺序启动,需确定其依赖单元,并在新单元配置中设置 “Want” 和 “After” 该依赖单元。
### 1.2 systemd 日志系统
journalctl 命令可从 systemd 日志中提取不同类型的数据,支持多种格式。与旧的 syslogd 程序相比,systemd 日志系统提供了更多元数据和上下文信息,有助于系统管理员更快定位和解决问题。以下是一些操作示例:
- 查看特定服务日志:`journalctl -S today -u myMonitor.service`
- 实时跟踪服务日志:`journalctl -S today -f -u myMonitor.service`
### 1.3 相关练习
为巩固知识,可完成以下练习:
1. 为何在定时器中使用 “OnCalendar = tomorrow” 会失败?
2. systemd 服务的启动时间在每次启动时是否一致?
3. 虚拟机中关键链里哪些服务以红色高亮显示?
4. 若为虚拟机分配额外 CPU 并重启,会发生什么?
5. 使用 systemd - analyze 确定上次启动的总时间。
6. avahi 有何作用?
7. avahi 启动耗时多久?
8. 终止并禁用 avahi。
9. systemd 日志中是否有紧急级别的条目?
## 2. systemd 定时器
### 2.1 日历事件表达式
systemd 及其定时器的时间和日期表达式与 crontab 不同,更具灵活性,允许模糊日期和时间,类似 at 命令。基本格式为 “DOW YYYY - MM - DD HH:MM:SS”,DOW(星期几)可选,其他字段可用星号 (*) 匹配任意值。部分特殊符号用法如下:
- 波浪号 (~):指定月份的最后一天或距最后一天指定天数。
- 斜杠 (/):修饰星期几。
| 表达式示例 | 含义 |
| --- | --- |
| *-*-* *:*:00 | 每分钟触发 |
| Mon *-*-* 08:00:00 | 每周一 08:00:00 触发 |
| *-01-01 00:00:00 | 每年 1 月 1 日 00:00:00 触发 |
### 2.2 系统自带定时器
在 Fedora 等基于 systemd 的发行版中,安装时会创建多个定时器用于系统维护。可使用 `systemctl status *timer` 列出所有定时器:
```plaintext
[root@studentvm1 ~]# systemctl status *timer
● systemd-tmpfiles-clean.timer - Daily Cleanup of Temporary Directories
Loaded: loaded (/usr/lib/systemd/system/systemd-tmpfiles-clean.timer; static)
Active: active (waiting) since Thu 2023-05-04 08:21:53 EDT; 4h 53min ago
Trigger: Fri 2023-05-05 08:37:15 EDT; 19h left
Triggers: ● systemd-tmpfiles-clean.service
Docs: man:tmpfiles.d(5)
man:systemd-tmpfiles(8)
May 04 08:21:53 studentvm1 systemd[1]: Started systemd-tmpfiles-clean.timer -
Daily Cleanup of Temporary Directories.
...
```
每个定时器的信息包含文件名、描述、状态、下次触发时间、触发的服务等。部分定时器还会指向相关文档。
### 2.3 创建自定义定时器
下面通过一个简单示例展示如何创建自定义服务单元和定时器单元。
#### 2.3.1 创建服务单元
在 `/etc/systemd/system` 目录下创建 `myMonitor.service` 文件:
```plaintext
# This service unit is for testing timer uni
```
0
0
复制全文
相关推荐










