第 24 章 自动执行系统任务
您可以将 Red Hat Enterprise Linux 配置为自动运行任务,也称为作业 :
- 使用 cron 定期使用,请参阅 第 24.1 节 “使用 Cron 调度周期性作业”
- 使用 anacron 在特定天数内异步显示,请参阅 第 24.2 节 “使用 Anacron 计划周期性作业”
- 在使用 时的特定时间 , 请查看 第 24.3 节 “使用 at 将作业计划在特定时间运行”
- 使用 批处理 系统负载平均值降至指定值后,请参阅 第 24.4 节 “使用批处理调度作业在系统负载 Drop 上运行”
- 下一次引导后,请参阅 第 24.5 节 “使用 systemd 单元文件调度作业在下一次引导时运行”
本章论述了如何执行这些任务。
24.1. 使用 Cron 调度周期性作业
Cron
是一个服务,可让您定期调度运行任务(通常称为作业)。只有在系统按计划的时间运行时, 才会执行 cron
作业。有关可以在系统引导时将其执行延迟到调度作业,因此如果系统未运行,则作业不会"丢失",请参阅 第 24.3 节 “使用 at 将作业计划在特定时间运行”。
用户在 cron 表文件中指定 cron 作业,也称为 crontab
文件。然后,crond 服务读取这些文件,该服务
将执行作业。
24.1.1. Cron 作业的先决条件
在调度 cron
任务前:
安装 cronie 软件包:
~]# yum install cronie
安装时,crond
服务
已启用 - 在引导时自动启动。如果禁用该服务,启用该服务:~]# systemctl enable crond.service
为当前会话启动
crond
服务:~]# systemctl start crond.service
(可选) 配置 cron.例如,您可以更改:
- 执行作业时要使用的 shell
-
PATH
环境变量 如果作业发送电子邮件,请邮件.
有关配置
cron
的详情,请查看 crontab(5)手册页。
24.1.2. 调度 Cron 作业
以 root 用户身份调度作业
root
用户使用 /etc/crontab
中的 cron 表,或者最好在 /etc/cron.d/
中创建 cron 表文件。使用这个流程以 root
用户身份调度作业:
选择:
-
在每小时的几分钟内执行作业。例如,使用
0,10,20,30,40,50
或0/10
指定每小时 10 分钟。 -
作业执行一天的几小时。例如,使用
17-20
指定从 17:00 到 20:59 的时间。 -
执行作业的每月天数。例如,使用
15
指定一个月 15 天。 -
在一年内执行该作业。例如,使用
Jun、Jul、Aug
或6,7,8
指定一年的暑期月。 在一周内执行该作业的天数。例如,将
*
用于作业以独立于星期几执行。将所选值合并到时间规格中。以上示例值导致这个规格:
0,10,20,30,40,50 17-20 15 Jun,Jul,Aug *
-
在每小时的几分钟内执行作业。例如,使用
-
指定用户。该作业将像该用户运行一样执行。例如,使用
root
。 -
指定要执行的命令。例如:使用
/usr/local/bin/my-script.sh
将以上规格放在一行中:
0,10,20,30,40,50 17-20 15 Jun,Jul,Aug * root /usr/local/bin/my-script.sh
-
将生成的行添加到
/etc/crontab
,或者最好在/etc/cron.d/
中创建 cron 表文件,并在其中添加 行。
该作业现在将按计划运行。
有关如何指定作业的完整参考,请参阅 crontab(5)手册页。有关基本信息,请查看 /etc/crontab
文件的开头:
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed
以非 root 用户身份调度作业
非 root 用户可以使用 crontab 实用程序配置 cron 作业。如果由该用户执行,作业将像 一样运行。
以特定用户身份创建 cron 任务 :
在用户的 shell 中运行以下命令:
[bob@localhost ~]$
crontab -e
这将开始使用由
VISUAL
或EDITOR
环境变量指定的编辑器编辑用户自己的crontab
文件。以与 “以 root 用户身份调度作业”一节 中的相同方式指定作业,但将该字段保留为用户名。例如,而不是添加
0,10,20,30,40,50 17-20 15 Jun,Jul,Aug * bob /home/bob/bin/script.sh
添加:
0,10,20,30,40,50 17-20 15 Jun,Jul,Aug * /home/bob/bin/script.sh
- 保存文件并退出编辑器。
(可选)要验证新作业,请运行以下命令列出当前用户 crontab 文件的内容:
[bob@localhost ~]$
crontab -l
@daily /home/bob/bin/script.sh
计划 Hourly、Daily、Weekly 和 Monthly 作业
调度一个每小时、每天、每周或每月的作业:
- 将您希望作业执行的操作放入 shell 脚本中。
将 shell 脚本放在以下目录中之一:
-
/etc/cron.hourly/
-
/etc/cron.daily/
-
/etc/cron.weekly/
-
/etc/cron.monthly/
-
从现在开始,将执行脚本 - crond
服务会自动执行 /etc/cron.hourly、/
etc/cron.daily
、/etc/cron.weekly
和 /etc/cron.monthly
目录中的任何脚本。