Linux 中的 Crontab – 带有实时示例和工具

已发表: 2015-07-26

让我们探索一下 crontab、它的命令以及与 Crontab 相关的各种操作。

我们将学习如何使用 cron 实用程序安排任务,最后,我们还将讨论一些帮助我们格式化和测试 cron 命令的在线工具。

起源

crontab 代表“ cron 表”。 cron 这个词取自希腊词Chronos ,意思是时间。 Crontab 是一个系统守护进程,它会按照预定的时间自动执行一些任务和作业。

用例

Crontab 可用于执行各种操作,例如处理自动备份、轮换日志文件、在远程机器之间同步文件以及清除临时文件夹等。Crontab 可用于任何类型的工作,但当我们开始处理系统管理类工作。

使用 cron,管理员可以安排作业在特定时间和日期运行。

那么让我们看看如何设置它。

crontab 语法

要执行命令列表,cron 实用程序会读取配置文件。 为了解释crontab配置表中的行,它遵循 Crontab 语法。 Crontab 有六个字段,前五(1-5)个字段定义了执行的日期和时间。 最后一个字段,即第 6 个字段,可以是要执行的用户名和/或任务/job/command/script。

* * * * * USER_NAME 命令/脚本执行

│ │ │ │ │
│ │ │ │ │
│ │ │ │ |_________星期几(0 - 6)(0 是星期日,或使用名称)
│ │ │ | ____________月 (1 – 12),* 表示每个月
│ │ | ______________月份中的某一天 (1 – 31),* 表示每一天
│ | ________________小时 (0 – 23),* 表示每小时
| ___________________分钟 (0 – 59),* 表示每分钟

备注

  • 星号 (*) 用于匹配字段的所有可能值。 例如,小时字段中使用的星号相当于每小时,或者月份字段中的星号相当于每个月。
  • 用户名是可选的(仅当它是系统 crontab 文件时才可用)

例子:

让我们通过一些例子来理解上面的语法

1. 安排一个 cron 在每天早上 5 点执行

0 5 * * * /scripts/job.sh

2. 安排一个 cron 在每天早上 6 点和下午 6 点执行两次

0 6,18 * * * /scripts/job.sh

3. 安排一个 cron 每分钟执行一次

* * * * * /scripts/job.sh

4. 安排一个 cron 在每周一晚上 7 点执行。

 0 19 * * mon /scripts/job.sh

5. 安排一个 cron 每 15 分钟执行一次。

 */10 * * * * /scripts/job.sh

6. 安排一个 cron 在选定的月份执行

* * * feb,jun,oct * /script/job.sh

7. 在 3 月 4 日上午 7:25 运行 shell 脚本/home/script/backup.sh

 25 7 4 3 * /home/script/backup.sh

8. 安排一个 cron 每 30 秒执行一次

由于我们无法控制 Crontab 中的秒数,但我们可以通过以下两步过程来实现。

  • 让我们首先安排一个每分钟运行的任务。
 * * * * * /home/scripts/script.sh
  • 现在让我们使用sleep命令暂停执行 30 秒。
 * * * * * sleep 30; /home/scripts/script.sh

上述任务将停止执行 30 秒,然后再次恢复。

Cron 配置文件的类型

有两种类型的 Cron 配置文件:

UNIX/Linux 系统 Crontab

这需要 root 权限,因为它通常用于系统服务和关键作业。 第六个字段(在上述语法描述中)是运行命令的用户名。 它使系统 crontab 能够以任何用户身份运行命令。

用户 crontab

用户还可以使用 crontab 命令安装自己的 cron 作业。 同样,第六个字段(在上述语法描述中)是要运行的命令,所有命令都以创建 crontab 的用户身份运行。 每个用户都可以有自己的 crontab 文件,虽然这些是/var/spool/cron/ crontabs 中的文件,但不能直接编辑它们。 我们需要使用 crontab 命令来编辑或设置我们自己的 cron 作业。

它是如何工作的?

cron 服务(守护进程)在后台运行并不断检查(每分钟) /etc/crontab文件和/etc/cron.*/目录。 它还检查/var/spool/cron/目录。 当分钟、小时和月份字段与当前时间匹配时,命令由cron执行,并且至少有一个两天字段(月份中的某天,或星期几)与当前日期匹配。

基本命令

列出现有的 Cron 作业

我们可以使用以下命令列出所有 Cron 作业,而无需打开 crontab 配置文件

crontab -l

如果没有现有作业,它将返回输出为

[geekflare@localhost ~]# crontab -l no crontab for geekflare [geekflare@localhost ~]#

如果用户已经添加了一些作业,它将显示如下。

 [geekflare@localhost ~]# crontab -l # Edit this file to introduce tasks to be run by cron. # # Each task to run has to be defined through a single line # indicating with different fields when the task will be run # and what command to run for the task # # To define the time you can provide concrete values for # minute (m), hour (h), day of month (dom), month (mon), # and day of week (dow) or use '*' in these fields (for 'any').# # Notice that tasks will be started based on the cron's system # daemon's notion of time and timezones. # # Output of the crontab jobs (including errors) is sent through # email to the user the crontab file belongs to (unless redirected). # # For example, you can run a backup of all your user accounts # at 5 am every week with: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # # For more information see the manual pages of crontab(5) and cron(8) # # mh dom mon dow command 0 */1 * * * /home/account/scripts/updateAccountStatuses.sh 0 */1 * * * /home/account/scripts/reActivateAccountStatus.sh [geekflare@localhost ~]#

cron 表是特定于用户的,这意味着您必须使用特定用户登录才能查看 cron 表列表。

列出特定用户的 Cron

要列出另一个用户的计划作业,请使用-u ( User ) 和-l ( List ) 选项。

crontab -u another_username -l

示例crontab -u geekflare -l

添加/修改 Crontab 条目

要编辑 crontab 条目,我们可以使用-e选项,如下所示。

crontab -e

上述命令将打开 vi 编辑器,您可以在其中指定作业的详细信息并保存文件。 保存后,您可以使用crontab -l验证是否配置了 cron。

为特定用户添加/修改 Crontab 条目

我们可以使用以下命令为另一个用户编辑 crontab

 crontab -u another_username -e

示例crontab -u geekflare -e

删除 crontab 条目

<strong>-r</strong>参数与 Crontab 一起使用以删除完整的计划作业,而无需从 crontab 确认

crontab -r

如果您想在删除计划作业之前进行确认,请使用带有-r<strong>-i</strong>选项,这将在删除用户的 crontab 之前提示用户确认。

 crontab -i -r
 [geekflare@localhost ~]# crontab -i -r crontab: really delete geekflare's crontab?

crontab 特殊字符串

除了我们讨论的上述语法之外,我们还可以使用 Crontab 提供的八个特殊字符串。 它不仅可以节省我们的时间,还可以提高可读性。

特殊字符串描述
@reboot 运行一次,启动后。
@yearly 每年运行一次,即0 0 1 1 *
@annually@yearly相同
@monthly 每月运行一次,即0 0 1 * *
@weekly 每周运行一次,即0 0 * * 0
@daily 每天运行一次,即0 0 * * *
@midnight@daily相同
@hourly 每小时运行一次,即0 * * * *

Crontab 特殊字符串示例

1. crontab 每年安排任务

@yearly /scripts/greeting.sh

我们可以执行上面的一个来发送新年祝福,它将在每年的第一分钟执行。

2. Crontab 安排任务按月执行。

@monthly /scripts/cleanup.sh

我们可以在每个月初执行上述的一些清理活动。

同样,我们可以将其他 Crontab 特殊字符串用于每周、每天和每小时的目的。

cron 目录

系统管理员可以使用预定义 cron 目录下的系统范围的 cron 计划,如下所示

  • /etc/cron.d
  • /etc/cron.daily
  • /etc/cron.hourly
  • /etc/cron.monthly
  • /etc/cron.weekly

Crontab 实时示例

让我们讨论一些系统管理员或 IT 专业人员通常使用的实时示例。

删除空文件和目录

45 0 * * * geekflare find /tmp -type f -empty -delete

上面的 cron 表达式将从/tmp目录中找到空文件和目录,并将其删除。 该作业将在每天上午 12.45运行。 我们需要提及用户名来执行这项工作。 在上面的示例中, geekflare用户正在执行 cron 作业操作。

使用单个 cron 执行多个任务

* * * * * /home/scripts/backup.sh; /home/scripts/scritp.sh

多个任务/作业可以使用分号 ( ; ) 分隔,并且可以分配给单个 cron 表达式。

Cron 格式化和测试工具

到目前为止,我们讨论了 crontab 的命令和语法来安排任务。 但是,如果您不是系统管理员,并且您的工作不是定期设置 Cron,那么您可能无法记住语法,并且会为错误留出空间。 别担心,我们有办法解决这个问题。

网上有几种 Cron 格式化工具。

# 1. Cron 作业生成器

Cron Job Generator 是一个非常用户友好的 GUI,您可以在其中指定脚本的分钟、天和路径来生成 crontab。

让我们举一个实时示例,我必须在周一到周五之间每 5 分钟执行一次/home/processMonitor.sh

所以,我得到了下面的 Cron 语法,我可以通过执行将其放入我的 crontab

crontab –e
0,5,10,15,20,25,30,35,40,45,50,55 * * * 1-5 /home/processMonitor.sh

# 2. Easycron

Easycron 是一个有用的基于 Web 的 cron 作业调度程序。 我们可以通过指定要调用的 URL创建一个 cron 作业,我们可以设置它应该执行的时间。 我们还可以指定一个 cron 表达式或从描述形式手动添加它。 重要的是,我们可以选择使用基本 HTTP 身份验证来实现一小层安全性。

不仅如此,Easycron 还可以用来实现标准 Cron 表达式、Cron Job Execution Logs、Email Notification、Separate Failure Logs 等其他用途。

# 3. crontab 生成器

Crontab Generator 是另一个生成 crontab 的便捷工具,使用此工具,您还可以添加是否要将 cron 输出保存到文件或发送到电子邮件。

# 4. Crontab 大师

Crontab Guru 是一个简单的在线 cron 计划表达式编辑器。 此外,它还提供了一种有用的方法来监视您的 cronjob。 我们需要做的就是复制提供的命令并附加到 crontab 定义的末尾。 如果 cron 作业失败或什至没有启动,您将收到一封警报电子邮件。

在下面的示例中,作业将在每天、每月和每周的04:05执行。

# 5. CRON 测试仪

CRON Tester 允许我们测试 cron 时间/日期定义。 在某些情况下,我们必须解码现有的 cron 语法以进行故障排除或只想进行测试。

为此,我们可以使用此工具。 我们需要做的就是将我们的 cron 表达式复制并粘贴到 cron 定义字段中,然后选择迭代次数并单击“测试”以查看它将运行的各个日期。

让我们检查一下我们的 cron 表达式之一4 3 */2 * * ,它应该每两天在03:04(AM)运行一次。 让我们用 cron tester 来验证一下。

结论

我希望以上内容可以帮助您更好地了解 Crontab 并设置 cron 作业。 通过 Cron 调度作业是 Linux Admin 执行的众多任务之一。 如果您有兴趣学习高级技能,请查看本课程。