如何使用Cron在VPS上自动执行任务

来自菜鸟教程
跳转至:导航、​搜索

介绍


在 Linux 机器上在后台运行任务的最标准方法之一是使用 cron 作业。 它们对于在 VPS 上安排任务和自动化不同的维护相关工作很有用。 “Cron”本身就是一个后台运行的守护进程(或程序)。 运行的不同作业的计划位于名为“crontab”的配置文件中。

安装


几乎所有发行版都默认安装了一种 cron 形式。 但是,如果您使用的系统没有安装它,您可以使用以下命令安装它:

对于 Ubuntu/Debian:

sudo apt-get update
sudo apt-get install cron

对于 Cent OS/Red Hat Linux:

sudo yum update
sudo yum install vixie-cron crontabs

您还需要确保它也在后台运行:

sudo /sbin/chkconfig crond on
sudo /sbin/service crond start

句法


这是我们想要运行的示例任务:

5 * * * * curl http://www.google.com

我们将在 crontab 中放置的不同作业的语法可能看起来令人生畏。 如果您知道如何阅读,它实际上是非常简洁且易于解析的。 每个命令都分解为:

  • 日程
  • 命令

该命令几乎可以是您通常在命令行上运行的任何命令。 语法的调度组件按以下顺序分解为 5 个不同的调度选项:

  • 分钟
  • 小时
  • 一个月中的哪一天
  • 一周中的天

例子


以下是您在配置 cron 时可能遇到的一些常见计划的示例列表。

每分钟运行一个命令:

* * * * *

要在整点每 12 分钟运行一次命令:

12 * * * *

您还可以为每个占位符使用不同的选项。 每 15 分钟运行一次命令:

0,15,30,45 * * * *

要在每天凌晨 4:00 运行命令,您可以使用:

0 4 * * *

要在每周二凌晨 4:00 运行命令,您可以使用:

0 4 * * 2

您可以在日程安排中使用除法。 除了列出 0、15、30、45 之外,您还可以使用以下命令:

*/4 2-6 * * *

注意“2-6”范围。 此语法将在凌晨 2:00 到 6:00 之间运行命令。

调度语法非常强大和灵活。 你可以表达几乎所有可以想象的时间。

配置


一旦你确定了一个时间表并且你知道你想要运行的工作,你就必须有一个地方来放置它,这样你的守护进程就可以读取它。 有几个不同的地方,但最常见的是用户的 crontab。 如果您还记得,这是一个包含 cron 将运行的作业计划的文件。 每个用户的文件位于 /var/spool/cron/crontab,但不应直接编辑它们。 相反,最好使用 crontab 命令。

您可以使用以下命令编辑 crontab:

crontab -e

这将打开一个文本编辑器,您可以在其中输入您的日程安排,每个作业都在一个新的行上。

如果您想查看您的 crontab,但不对其进行编辑,您可以使用以下命令:

crontab -l

您可以使用以下命令擦除 crontab:

crontab -r

如果您是特权用户,您可以通过指定 crontab -u <user> -e 来编辑其他用户的

输出


对于每个执行的 cron 作业,与该用户关联的用户电子邮件地址将通过电子邮件发送输出,除非它被定向到日志文件或 /dev/null。 如果您在 crontab 顶部提供“MAILTO”设置,则可以手动指定电子邮件地址。 您还可以使用以下示例指定要运行的 shell、搜索 cron 二进制文件的路径和主目录:

首先,让我们编辑 crontab:

crontab -e

然后,我们将像这样编辑它:

SHELL=/bin/bash
HOME=/
MAILTO=”example@digitalocean.com”
#This is a comment
* * * * * echo ‘Run this command every minute’

此特定作业将输出“每分钟运行此命令”。 该输出将每分钟通过电子邮件发送到我指定的“example@digitalocean.com”电子邮件地址。 显然,这可能不是一个理想的情况。 如前所述,我们还可以将输出通过管道传输到日志文件或空位置,以防止收到带有输出的电子邮件。

要附加到日志文件,它很简单:

* * * * * echo ‘Run this command every minute’ >> file.log

注意:“>>”附加到文件中。

如果要通过管道连接到空位置,请使用 /dev/null。 这是一个在后台执行并运行的 PHP 脚本。

* * * * * /usr/bin/php /var/www/domain.com/backup.php > /dev/null 2>&1

限制访问


使用 /etc/cron.allow/etc/cron.deny 文件可以轻松限制对 cron 的访问。 为了允许或拒绝用户,您只需将他们的用户名放在这些文件之一中,具体取决于所需的访问权限。 默认情况下,大多数 cron 守护程序将假定所有用户都可以访问 cron,除非这些文件之一存在。 要拒绝所有用户访问并授予用户 tdurden 访问权限,您将使用以下命令序列:

echo ALL >>/etc/cron.deny
echo tdurden >>/etc/cron.allow

首先,我们通过将“ALL”附加到拒绝文件来锁定所有用户。 然后,通过将用户名附加到允许文件,我们授予用户执行 cron 作业的权限。

特殊语法


您可以在 crontab 文件中使用几个速记命令来简化管理。 它们是指定的等效数字计划的基本快捷方式:

  • @hourly - 0 * * * * 的简写
  • @daily - 0 0 * * * 的简写
  • @weekly - 0 0 * * 0 的简写
  • @monthly - 0 0 1 * * 的简写
  • @yearly - 0 0 1 1 * 的简写

@reboot,它在启动时运行一次命令。

注意:并非所有 cron 守护进程都可以解析此语法(尤其是旧版本),因此在依赖它之前请仔细检查它是否有效。

要让作业在启动时运行,您将编辑 crontab 文件 (crontab -e) 并在文件中放置类似于以下内容的行:

@reboot echo "System start up"

这个特定的命令将被执行,然后通过电子邮件发送给 crontab 中指定的用户。