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

了解如何使用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

您可以在计划中使用division。 而不是列出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

限制访问


限制访问cron是易与/etc/cron.allow/etc/cron.deny文件。 为了允许或拒绝用户,您只需要将其用户名放在其中一个文件中,具体取决于所需的访问权限。 默认情况下,大多数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中指定的用户。