如何使用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 中指定的用户。