跳到内容

任务管理

在本章中,您将学习如何管理计划任务。


**目标**: 在本章中,未来的 Linux 管理员将学习如何

✔ Linux 处理任务调度;
✔cron 的使用限制在某些用户;
✔ 计划任务。

🏁 crontabcrond调度linux

**知识**: ⭐ ⭐
**复杂性**: ⭐ ⭐

**阅读时间**: 15 分钟


一般性

任务的调度由 cron 实用程序管理。它允许周期性执行任务。

它专供管理员用于系统任务,但普通用户也可以将其用于他们有权访问的任务或脚本。要访问 cron 实用程序,我们使用:crontab

cron 服务用于

  • 重复的管理操作;
  • 备份;
  • 监控系统活动;
  • 程序执行。

crontabcron 表 的简写,但可以看作是任务调度表。

警告

要设置计划,系统必须设置正确的时间。

服务的工作原理

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.allowcron.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 需要了解的有关此用户创建的所有任务的信息,包括要运行的命令或程序,以及何时运行它们(小时、分钟、天...)。

Cron tree

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 文件

  1. crond 检查他是否有权限(/etc/cron.allow/etc/cron.deny)。

  2. 如果他被允许,他就可以访问他的 crontab 文件(/var/spool/cron/rockstar)。

    每分钟 crond 读取计划文件。

  3. 它执行计划的任务。

  4. 它会在日志文件(/var/log/cron)中系统地报告。