任务管理¶
在本章中,您将学习如何管理计划任务。
**目标**: 在本章中,未来的 Linux 管理员将学习如何
Linux 处理任务调度;
将
cron
的使用限制在某些用户; 计划任务。
crontab、crond、调度、linux
**知识**:
**复杂性**:
**阅读时间**: 15 分钟
一般性¶
任务的调度由 cron
实用程序管理。它允许周期性执行任务。
它专供管理员用于系统任务,但普通用户也可以将其用于他们有权访问的任务或脚本。要访问 cron
实用程序,我们使用:crontab
。
cron
服务用于
- 重复的管理操作;
- 备份;
- 监控系统活动;
- 程序执行。
crontab
是 cron 表 的简写,但可以看作是任务调度表。
警告
要设置计划,系统必须设置正确的时间。
服务的工作原理¶
cron
服务由内存中的 crond
守护进程运行。
要检查其状态
[root] # systemctl status crond
提示
如果 crond
守护进程没有运行,您将不得不手动或/或在启动时自动初始化它。实际上,即使计划了任务,它们也不会启动。
手动初始化 crond
守护进程
[root]# systemctl {status|start|restart|stop} crond
在启动时初始化 crond
守护进程
[root]# systemctl enable crond
安全性¶
为了实现计划,用户必须有权使用 cron
服务。
此权限根据以下文件中的信息而有所不同
/etc/cron.allow
/etc/cron.deny
警告
如果这两个文件都不存在,所有用户都可以使用 cron
。
cron.allow
和 cron.deny
文件¶
文件 /etc/cron.allow
只有此文件中包含的用户才能使用 cron
。
如果它存在并且为空,则没有用户可以使用 cron
。
警告
如果存在 cron.allow
,则 忽略 cron.deny
。
文件 /etc/cron.deny
此文件中的用户不允许使用 cron
。
如果它为空,则所有用户都可以使用 cron
。
默认情况下,/etc/cron.deny
存在并且为空,而 /etc/cron.allow
不存在。
允许用户¶
只有 user1 才能使用 cron
。
[root]# vi /etc/cron.allow
user1
禁止用户¶
只有 user2 不能使用 cron
。
[root]# vi /etc/cron.deny
user2
cron.allow
必须不存在。
计划任务¶
当用户计划任务时,会在 /var/spool/cron/
下创建一个带有其名称的文件。
此文件包含 crond
需要了解的有关此用户创建的所有任务的信息,包括要运行的命令或程序,以及何时运行它们(小时、分钟、天...)。
crontab
命令¶
crontab
命令用于管理计划文件。
crontab [-u user] [-e | -l | -r]
示例
[root]# crontab -u user1 -e
选项 | 描述 |
---|---|
-e | 使用 vi 编辑计划文件 |
-l | 显示计划文件的内容 |
-u | 设置要操作的计划文件所属用户的名称 |
-r | 删除计划文件 |
警告
crontab
不带选项会删除旧的计划文件并等待用户输入新行。您需要按下 ctrl + d 退出此编辑模式。
只有 root
用户可以使用 -u user
选项管理其他用户的计划文件。
上面的示例允许 root 为 user1 计划任务。
crontab
的用途¶
crontab
的用途很多,包括
- 对
crontab
文件的修改会立即生效; - 无需重启。
另一方面,以下几点需要考虑
- 程序必须是独立的;
- 提供重定向(stdin、stdout、stderr);
- 运行在终端上使用输入/输出请求的命令是不相关的。
注意
重要的是要理解,计划的目的是在无需外部干预的情况下自动执行任务。
crontab
文件¶
crontab
文件的结构遵循以下规则。
- 此文件的每一行对应一个计划;
- 每一行有六个字段,5 个用于时间,1 个用于命令;
- 每个字段用空格或制表符分隔;
- 每一行以回车符结尾;
- 行首的
#
标记为注释。
[root]# crontab –e
10 4 1 * * /root/scripts/backup.sh
1 2 3 4 5 6
字段 | 描述 | 详细信息 |
---|---|---|
1 | 分钟 | 从 0 到 59 |
2 | 小时 | 从 0 到 23 |
3 | 每月日期 | 从 1 到 31 |
4 | 月份 | 从 1 到 12 |
5 | 每周日期 | 从 0 到 7(0=7=星期日) |
6 | 要执行的任务 | 完整命令或脚本 |
警告
要执行的任务必须使用绝对路径,如果可能,请使用重定向。
为了简化时间定义的符号,建议使用特殊符号。
通配符 | 描述 |
---|---|
* | 表示字段的所有可能值 |
- | 表示值的范围 |
, | 表示值的列表 |
/ | 定义步长 |
示例
在 4 月 15 日上午 10:25 执行脚本
25 10 15 04 * /root/scripts/script > /log/…
每天上午 11 点和下午 4 点运行
00 11,16 * * * /root/scripts/script > /log/…
每天上午 11 点到下午 4 点每小时运行一次
00 11-16 * * * /root/scripts/script > /log/…
工作时间每 10 分钟运行一次
*/10 8-17 * * 1-5 /root/scripts/script > /log/…
对于 root 用户,crontab
还有一些特殊的时间设置
设置 | 描述 |
---|---|
@reboot | 在系统重启时运行命令 |
@hourly | 每小时运行一次命令 |
@daily | 每天午夜后运行 |
@weekly | 每个星期日午夜后运行命令 |
@monthly | 每月第一天午夜后运行命令 |
@annually | 每年 1 月 1 日午夜后运行 |
任务执行过程¶
用户 rockstar 想编辑他的 crontab
文件
crond
检查他是否有权限(/etc/cron.allow
和/etc/cron.deny
)。如果他被允许,他就可以访问他的
crontab
文件(/var/spool/cron/rockstar
)。每分钟
crond
读取计划文件。它执行计划的任务。
它会在日志文件(
/var/log/cron
)中系统地报告。