17611538698
webmaster@21cto.com

Linux:如何使用 Cron 安排常规作业

运维 0 39 2025-01-07 08:03:58

图片

使用 Cron,你可以安排 Linux 上几乎任何类型的作业,例如将特定目录备份到外部驱动器。

当我们使用Linux时,你可以随意创建一个强大、灵活且自动化的环境来满足你的任何目的。

可用于自动化的工具之一便是Cron。使用 Cron,你可以在 Linux 上安排几乎任何类型的作业。例如,你可以编写一个 bash 脚本来将特定目录备份到外部驱动器。如果想让该备份脚本自动运行,就需要创建所谓的 cronjob,这样它就会在你想要的时候准确运行。

几乎每个Linux 发行版都默认安装了 Cron ,因此您无需添加任何内容即可自动执行任务。

但是 Cron 如何使用呢?本文就来告诉你。

Cron 是如何工作的?

Cron 依赖于 crontab 文件,这些文件保存在 /var/spool/cron 中。但是,重要的是要明白,您不要手动编辑这些文件。为什么?因为 Cron 有一个可用于编辑 crontab 文件的工具。

这又引出了另一点。Linux 系统上的每个用户都有自己的 crontab 文件。任何用户都可以创建 crontab 文件,甚至可以使用以下命令查看其当前的 cron 任务:

crontab -l

该命令的输出将显示包含您创建的任何自定义 cron 作业的 crontab 文件的内容。

大多数人对 Cron 感到困惑的一件事是时间格式。Cron 有五个时间和日期条目,分别是:

  • 分钟 (0-59)

  • 小时 (0-23)

  • 月份日期 (1-31)

  • 月份 (1-12)


星期几(0-6,可以使用Sunday, Monday, Tuesday等,其中星期日可以用 0、7 或 Sunday 表示)

时间/日期格式配置如下:

M H D MO DW

其中 M 表示分钟,H 表示小时,Day 表示月份中的天数,MO 表示月份,DW 表示星期几。

例如,如果你创建了一个备份脚本并且希望它每周日晚上 11:00 运行,则时间/日期格式为:

0 23 * * 0


在任何时候在 Cron 中看到星号,它就知道你希望它在该时间/日期条目的每个实例期间运行。在上面的示例中,月份的日期和月份条目都有星号,这意味着它们将在每个月的每一天和每个月运行。

如果你希望该作业每周六晚上 11:59 运行,则输入内容为:

59 23 * * 6

或者你也可以这样表述:

59 23 * * Saturday


添加 Cronjob

让我们创建一个备份脚本,然后创建一个 cron 作业,以便它每周日晚上 11 点运行。

我们的备份脚本,内容如下所示:

#!/bin/bash
# What you want to backup.
backup_files="/home/$USER/Documents"
# Where you want to backup to.
dest="/backup"
# Create an archive filename.
day=$(date +%A)
hostname=$(hostname -s)
archive_file="$hostname-$day.tgz"
# Backup the files using tar.
tar czf $dest/$archive_file $backup_files


将该文件另存为sat_backup.sh。还需要使用以下命令创建 /backup 目录:

sudo mkdir /backup


更改权限,以便你的用户可以使用。以下命令进行写入:

sudo chmod -R u+w /data


还需要确保目录所有权正确,例如:

sudo chown -R $USER:$USER /data


保存备份脚本后,使用以下命令将其移动到 /usr/local/bin:

sudo mv sat_backup.sh /usr/local/bin

授予脚本可执行权限:

sudo chmod u+x /usr/local/bin/sat_backup.sh


继续之前,请通过发出以下命令确保脚本按预期运行:

sat_backup.sh


现在,让我们创建 cronjob。为此,使用以下命令:

crontab -e


如果这是您第一次运行上述命令,系统将提示您选择默认编辑器。我强烈建议选择 Nano,因为它非常易于使用。

在文件底部,添加以下内容:

0 23 * * 0 /usr/local/bin/sat_backup.sh > /dev/null 2>&1


需要做一点解释。

我们已经知道 0 23 * * 0 是什么意思,/usr/local/bin/sat_backup.sh 是创建的脚本。但是 /dev/null 2>&1 呢?

这是一个关键元素,因为如果脚本产生任何输出(甚至是错误),它就会失败,而不知道将错误发送到哪里。在上述情况下,/dev/null 2>&1 本质上是一个垃圾桶。如果没有这个谜题,如果发现任何错误,cron 作业将无法运行。更具体地说:

  • 2 是标准错误的文件描述符

  • > 用于重定向

  • & 是文件描述符的符号

  • 1 是标准输出的文件描述符


这意味着所有标准错误都被重定向到标准输出并被发送到称为 /dev/null 的黑洞。

使用 Ctrl+x 键盘快捷键保存 cronjob。然后,你可以使用以下命令查看 cronjob:

crontab -l

你应该会看到列出的新 cronjob,下周日晚上 11 点,该作业将自动运行,并且将在 /data 中找到一个新的备份文件。

这就是 Linux cronjobs 的全部功能。作为 Linux 用户和/或管理员,此工具对你来说一定很有用。

作者:聆听音乐的鱼

评论