介绍
在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中指定的用户。