Skip to content

Commit f88aa5b

Browse files
authored
Merge pull request #325 from jimcat8/main
add cronie.zh.md file
2 parents 4f81cc8 + ae1e1de commit f88aa5b

File tree

1 file changed

+117
-0
lines changed

1 file changed

+117
-0
lines changed
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
---
2+
title: cronie - 定时任务
3+
author: tianci li
4+
update: 2021-10-26
5+
---
6+
7+
# 前提条件
8+
9+
* 一台运行 Rocky Linux 的机器。
10+
* 知道如何在命令行环境下使用您喜欢的编辑器修改配置文件(本文将使用 _vi_)。
11+
* 您已了解 bash、python 或其他脚本/编程工具的基本知识,并期望自动运行脚本。
12+
* 您已经通过ssh的方式连接您的机器(可以是root用户,也可以是UID大于1000的普通用户)
13+
* 我们认为,您是非常酷的人。
14+
15+
# cron简介
16+
17+
GNU/Linux提供了*cron* 系统,这是一个基于时间的cron jobs程序,用于自动化进程。它很简单,但功能相当强大。想要一个脚本或程序在每天下午5点运行吗?cron就能做到。cron有不同的分支(或者叫变体),它们具有相同的功能,在本文档中,使用的是 **cronie**,版本为1.5.2,您可以在[这里](https://github.com/cronie-crond/cronie)找到最新的版本与更新日志。
18+
19+
## cronie的说明
20+
21+
* **cronie** - 软件包名称,默认情况下,Rocky Linux就包含了cronie这个软件包;
22+
* **crontab** - 命令,用于维护每个用户的crontab(任务时间表);
23+
* **crond.service** - cronie的守护进程,您可以通过`systemctl start | restart | stop |status `的方式管理守护进程;
24+
* **/etc/crontab** - 给不同的用户分配cron jobs,通常我们更加习惯使用`crontab -e`的方式。例如当前登录为root用户,键入`crontab -e`,保存后会在/var/spool/cron/root 这个文件中会看到具体的 cron jobs 。
25+
* **/var/log/cron\*** - cronie的日志,默认情况下,做了日志轮替,以日期后缀结尾。\* 这里表示通配符
26+
* **anacron** - 属于 cronie 的一部分, 关于`anacron`的更多信息,见 [anacron - 自动化命令](anacron.zh.md)
27+
28+
## crontab 命令
29+
30+
`crontab`是由cronie包安装后得到的命令,相比anacron,它更加适合7\*24小时工作的服务器。`crontab`的常用选项有:
31+
32+
```bash
33+
-e # 编辑crontab定时任务
34+
-l # 查看crontab任务
35+
-r # 删除当前用户所有的crontab任务
36+
```
37+
38+
## cronie 的使用
39+
40+
要让不同的用户在不同的时间执行不同的命令(或脚本),可写入这个文件中。但是,通常我们更加习惯使用`crontab -e`的方式。
41+
42+
```bash
43+
shell > cat /etc/crontab
44+
SHELL=/bin/bash
45+
PATH=/sbin:/bin:/usr/sbin:/usr/bin
46+
MAILTO=root
47+
48+
# For details see man 4 crontabs
49+
50+
# Example of job definition:
51+
# .---------------- minute (0 - 59)
52+
# | .------------- hour (0 - 23)
53+
# | | .---------- day of month (1 - 31)
54+
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
55+
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
56+
# | | | | |
57+
# * * * * * user-name command to be executed
58+
```
59+
60+
|参数|含义|值范围|
61+
|---|---|---|
62+
|第1个 \*|一小时的第几分钟|0-59|
63+
|第2个 \*|一天当中的第几个小时|0-23|
64+
|第3个 \*|一个月当中的第几天|1-31|
65+
|第4个 \*|一年当中的第几个月|1-12|
66+
|第5个 \*|一周当中的星期几|0-7(0与7都表示星期日)|
67+
68+
本示例中,假设您以 root 用户身份执行此操作,键入以下内容:`crontab -e`,这将调出 root 用户的定时任务,如果您使用 vi 作为默认的系统编辑器,按<kbd>i</kbd>键进入到插入模式,输入以下内容,# 表示这是一行注释。按<kbd>Esc</kbd>退出插入模式,输入 :wq (显示在最底部) 保存退出vi,这表示在每天晚上 22 点运行一次脚本。显然,这是一个非常简单的示例,当您需要详细说明时,情况可能会变得非常复杂。
69+
70+
```bash
71+
# 每晚 10 点备份系统
72+
00 22 * * * /usr/local/sbin/backup
73+
```
74+
75+
!!! tip "注意"
76+
脚本需要有执行权限(`chmod +x`),cronie 才能运行它。
77+
78+
### 复杂选项
79+
80+
到目前为止,所讨论的内容都是非常简单的选项,但是更复杂的定时任务又该如何完成呢?
81+
82+
```bash
83+
# 假设要在一天中每 10 分钟运行一次备份脚本(可能不切实际,但是,仅是一个示例!)。为此,将编写以下内容:
84+
*/10 * * * * /usr/local/sbin/backup
85+
86+
# 如果您只想在星期一、星期三和星期五的每 10 分钟运行一次备份呢?:
87+
*/10 * * * 1,3,5 /usr/local/sbin/backup
88+
89+
# 除了星期六和星期日,每天每 10 分钟备份一次又如何?
90+
*/10 * * * 1-5 /usr/local/sbin/backup
91+
```
92+
93+
|特殊符号|含义|
94+
|---|---|
95+
|* |代表任何时间。比如第一个 * 表示任意分钟,第二个 * 表示任意小时 |
96+
|, |代表不连续时间,例如 " 0 8,12,16 * * * ",表示每天的8:00、12:00、16:00都执行一次命令 |
97+
|- |代表连续的时间范围,比如 " 0 5 * * 1-6 ",代表周一到周六的每天凌晨五点执行一次命令 |
98+
|*/n |代表间隔多久执行一次,比如 " */10 * * * * " 表示每间隔10分钟执行一次 |
99+
100+
!!! tip "注意"
101+
cronie所能识别的最小时间单位为1分钟;当使用比如 `30 4 1,15 * 5 command `,将导致命令在每个月的 1 号和 15 号以及每个星期五的凌晨 4:30 运行一次;一些脚本或者命令的输出信息会阻止定时任务的执行,需要使用输出重定向,例如这样的—— ` */10 * * * * /usr/local/sbin/backup &> /dev/null `
102+
103+
## Q & A
104+
105+
1. /etc/crontab 与`crontab -e`,这两种方式有什么区别吗?
106+
`crontab -e`不需要指定用户(默认使用当前登录的用户),而/etc/crontab 需要指定用户。
107+
2. 指定的命令或脚本未正确的执行,应该怎么办?
108+
查看/var/log/cron* 文件,使用`journalctl -u crond.service`查看守护进程方面的信息,脚本是否有x权限等,进行排查。
109+
3. 除了cronie外,还有哪些cron变体?
110+
[dcron](http://www.jimpryor.net/linux/dcron.html),最新版本为4.5(2011-50-01)。
111+
[fcron](http://fcron.free.fr/) ,最新版本为3.3.0(dev,2016-08-14)。
112+
[bcron](http://untroubled.org/bcron/),最新版本为0.11(2015-08-12)。
113+
[cronsun](https://github.com/shunfei/cronsun),最新版本0.3.5(2018-11-20)。
114+
115+
## 总结
116+
117+
对于 Rocky Linux 桌面用户或系统管理员而言,cronie一个非常强大的工具。它可以让您自动执行任务和脚本,这样您就不必记住手动运行它们。虽然基础知识很简单,但实际任务可能很复杂。有关 crontab 的更多信息,请访问 [crontab 手册页](https://man7.org/linux/man-pages/man5/crontab.5.html)。您还可以简单地在网上搜索“crontab”,它将为您提供大量搜索结果,帮助您微调 crontab 表达式。

0 commit comments

Comments
 (0)