Skip to content

Commit 0f5f3fe

Browse files
committed
docs(cron): edit text
1 parent dc49ee6 commit 0f5f3fe

File tree

1 file changed

+113
-34
lines changed

1 file changed

+113
-34
lines changed

docs/cron.md

+113-34
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,42 @@
44

55
Cron 是一个用来执行定时任务的工具,可以在指定的时间自动执行重复性任务。
66

7-
它的核心是 cron 守护进程,名为 crond。它在后台每分钟运行一次,检查是否有需要在指定时间执行的计划任务
7+
它的核心是 cron 守护进程,名为 crond。它在后台每分钟运行一次,检查是否有需要在当前时间执行的计划任务
88

99
下面命令可以查看 cron 守护进程,是否正常运行。
1010

1111
```bash
12+
# Ubuntu / Debian
1213
$ sudo systemctl status cron
14+
# or
15+
$ ps aux | grep cron
16+
17+
# rockyOS / RHEL
18+
$ sudo systemctl status crond
19+
# or
20+
$ ps aux | grep crond
1321
```
1422

1523
## crontab
1624

17-
crond 检查的定时任务,保存在 crontab 文件。该文件的每一行代表一个单独的作业,包含何时运行该任务,以及所要执行的命令。
25+
crond 检查的定时任务,保存在 crontab 文件。该文件的每一行代表一个单独的任务,包含何时运行该任务,以及所要执行的命令。
1826

1927
crontab 分成两个级别:用户个人的crontab,系统的 crontab。前者由用户本人编辑,后者只能由根用户编辑。
2028

21-
系统的 crontab 存放在`/etc/crontab`,以及一系列特殊目录之中:`/etc/cron.daily``/etc/cron.hourly``/etc/cron.weekly``/etc/cron.monthly`
29+
系统的 crontab 存放在`/etc/crontab`(或目录`/etc/cron.d/`),以及一系列特殊目录之中:`/etc/cron.daily``/etc/cron.hourly``/etc/cron.weekly``/etc/cron.monthly`
30+
31+
`crontab`本身也是一个命令,下面的命令可以检查现有的 cron 任务。
32+
33+
```bash
34+
# 当前用户的 cron 任务
35+
$ crontab -l
36+
37+
# 根用户的 cron 任务
38+
$ sudo crontab -l
39+
40+
# 某个指定用户的 cron 任务
41+
$ sudo crontab -u [USERNAME] -l
42+
```
2243

2344
## cron 任务的语法
2445

@@ -59,18 +80,38 @@ crontab 文件中,以“#”符号开头的行表示注释。
5980

6081
以下是一些示例。
6182

62-
- `* * * * *` 每分钟运行一次 cron 作业
63-
- `0 * * * *` 每小时运行一次 cron 作业
64-
- `0 0 * * *` 每天午夜运行 cron 作业
65-
- `0 2 * * *` 每天凌晨 2 点运行 cron 作业
66-
- `0 0 15 * *` 每个月 15 日午夜运行一次 cron 作业
67-
- `0 0 0 12 *` 周六午夜运行 cron 作业
68-
- `0 0 * * 6` 从周一到周五每天下午 3 点运行 cron 作业
69-
- `0 15 * * 1-5` 从周一到周五每天下午 3 点运行 cron 作业
70-
- `*/5 * * * *` 每 5 分钟运行一次 cron 作业
71-
- `0 8-16 * * *` 每天、每小时、从上午 8 点到下午 4 点准时执行 cron 作业
83+
- `* * * * *` 每分钟运行一次 cron 任务
84+
- `0 * * * *` 每小时运行一次 cron 任务
85+
- `0 0 * * *` 每天午夜运行 cron 任务
86+
- `0 2 * * *` 每天凌晨 2 点运行 cron 任务
87+
- `0 0 15 * *` 每个月 15 日午夜运行一次 cron 任务
88+
- `0 0 0 12 *` 周六午夜运行 cron 任务
89+
- `0 0 * * 6` 从周一到周五每天下午 3 点运行 cron 任务
90+
- `0 15 * * 1-5` 从周一到周五每天下午 3 点运行 cron 任务
91+
- `*/5 * * * *` 每 5 分钟运行一次 cron 任务
92+
- `0 8-16 * * *` 每天、每小时、从上午 8 点到下午 4 点准时执行 cron 任务
7293
- `0 4 * * 2,4` 在周二和周四凌晨 4 点运行 cron 作业。
73-
- `@reboot` 系统启动时运行 cron 作业。
94+
- `@reboot` 系统启动时或 crond 进程启动时运行 cron 任务。
95+
96+
此外,还有几个特殊字母。
97+
98+
`L` 表示 Last,仅适用于“月份中的某一天”和“星期几”。
99+
100+
```bash
101+
0 4 L * * command -每月最后一天凌晨 4 点
102+
0 4 * * 5L command -每月最后一个星期五凌晨 4 点
103+
```
104+
`W`表示 weekday,即该月内最近的一个工作日,仅适用于“月份中的某一天”。
105+
106+
```bash
107+
0 4 15W * * command -每月 15 日最近的工作日(周一至周五)凌晨 4 点
108+
```
109+
110+
`#`表示该月的第几个,仅适用于“星期几”。
111+
112+
```bash
113+
0 4 * * 5#2 -每月第二个周五凌晨 4 点
114+
```
74115

75116
### 环境变量
76117

@@ -92,51 +133,64 @@ SHELL=/bin/sh
92133

93134
上面示例设定执行 cron 任务时,使用 Bash。
94135

136+
添加其他环境变量,都是这种格式。
137+
138+
```bash
139+
result="HELLO WORLD"
140+
```
141+
142+
上面示例添加了环境变量`result`,值为“HELLO WORLD”。
143+
95144
## cron 任务管理
96145

97146
### 个人任务
98147

99148
创建或编辑用户的 crontab 文件,使用下面的命令。
100149

101150
```bash
102-
crontab -e
103-
```
104-
105-
上面的命令会打开系统默认文本编辑器,对用户的 crontab 文件进行编辑。
151+
# 编辑当前用户的 cron 任务
152+
$ crontab -e
106153

107-
添加 cron 任务,只需在 crontab 文件中添加一个新行即可。例如,备份脚本 backup.sh 每天凌晨 3:00 运行,就是添加下面的内容。
154+
# 编辑根用户的 cron 任务
155+
$ sudo crontab -e
108156

109-
```bash
110-
0 3 * * * /home/linuxiac/backup.sh
157+
# 编辑指定用户的 cron 任务
158+
$ sudo crontab -u [USERNAME] -e
111159
```
112160

113-
编辑完成后,保存并退出编辑器。Cron 服务会自动检查 crontab 文件,因此无需在更改后重新启动 Cron 进程
161+
上面的命令会打开系统默认文本编辑器,对用户的 crontab 文件进行编辑
114162

115-
`crontab -e`还会在保存和退出文件时,自动检查语法,防止意外输入无效的 cron 任务
163+
另一种方法是手动把 cron 任务添加到系统的`/etc/cronjob`文件,或者在`/etc/cron.d/`目录中创建一个新文件。建议使用后者,因为`/etc/cronjob`有可能在系统更新时被覆盖
116164

117-
下面命令可以列出当前用户的所有 cron 任务
165+
更新上面两个位置的 crontab 文件时,每个任务需要在第六个字段添加某个用户名,表示该任务运行在哪个用户名下
118166

119167
```bash
120-
$ crontab -l
168+
* * * * * user command
121169
```
122170

123-
如果拥有根用户权限,可以查看其他用户的 cron 任务。
171+
定期运行脚本还有一种方法,就是使用`/etc/cron.*`目录,将脚本保存在以下目录之一的里面,就可以直接以根用户的身份运行该任务。(为了确保脚本可以运行,最好打开脚本的运行权限。)
172+
173+
- /etc/cron.hourly/
174+
- /etc/cron.daily/
175+
- /etc/cron.weekly/
176+
- /etc/cron.monthly/
177+
178+
添加 cron 任务,只需在 crontab 文件中添加一个新行即可。例如,备份脚本 backup.sh 每天凌晨 3:00 运行,就是添加下面的内容。
124179

125180
```bash
126-
$ sudo crontab -u [用户名] -l
181+
0 3 * * * /home/linuxiac/backup.sh
127182
```
128183

129-
上面示例中,`[用户名]`是需要替换的部分
184+
编辑完成后,保存并退出编辑器。cron 服务会自动检查 crontab 文件,因此无需在更改后重新启动 cron 进程
130185

131-
编辑其他用户的 cron 任务,可以使用命令行参数`-e`
186+
`crontab -e`还会在保存和退出文件时,自动检查语法,防止意外输入无效的 cron 任务
132187

133-
```bash
134-
$ sudo crontab -u [用户名] -e
135-
```
188+
删除某个 cron 任务时,只要删除那一行即可。
136189

137-
删除某个 cron 任务时,只要删除那一行即可。如果想要删除所有的 cron 任务,只要删除 crontab 文件即可,也可以使用命令行参数`-r`
190+
如果想要删除所有的 cron 任务,只要删除 crontab 文件即可,也可以使用命令行参数`-r`
138191

139192
```bash
193+
# 删除当前用户的所有 cron 任务,而且没有提示
140194
$ crontab -r
141195
```
142196

@@ -145,9 +199,20 @@ $ crontab -r
145199
如果希望删除前出现确认提示,则可以使用命令行参数`-i`
146200

147201
```bash
202+
# 删除当前用户的所有 cron 任务之前,会有确认提示
148203
$ crontab -i -r
149204
```
150205

206+
下面是删除根用户和其他用户的 cron 任务。
207+
208+
```bash
209+
# 删除根用户的所有 cron 任务
210+
$ sudo crontab -r
211+
212+
# 删除特定用户的所有 cron 任务
213+
$ sudo crontab -u USERNAME -r
214+
```
215+
151216
### 系统任务
152217

153218
创建系统级别的 cron 任务,需要直接编辑`/etc/crontab`文件。
@@ -171,8 +236,22 @@ $ crontab -i -r
171236
- /etc/cron.weekly/ 目录
172237
- /etc/cron.monthly/ 目录
173238

239+
### cron 任务的日志
240+
241+
cron 任务执行的 stdout 输出不会被记录,必须添加到命令或脚本本身。
242+
243+
```bash
244+
0 4 * * 5L command -v >> /var/logs/command.log
245+
```
246+
247+
简单的执行记录,可以查看系统日志。Ubuntu / Debian 是`/var/log/syslog`或者`/var/log/auth.log`,RHEL/RHEL 是`/var/log/cron`,可以使用 grep 命令过滤日志。
248+
249+
```bash
250+
$ sudo grep -i cron /var/log/syslog /var/log/auth.log
251+
```
252+
174253
## 参考链接
175254

176255
- [How to Use Cron on Linux: Tips, Tricks, and Examples](https://linuxiac.com/how-to-use-cron-and-crontab-on-linux/)
177-
256+
- [Cron Jobs on Linux - Comprehensive Guide with Examples](https://ittavern.com/cron-jobs-on-linux-comprehensive-guide/)
178257

0 commit comments

Comments
 (0)