cron是一个在指定周期执行命令的系统守护进程,这些被cron 所执行的命令叫做“cron jobs”. Cron 一般运行在Unix,linux和mac服务器上, windows上没有cron ,但是windows有”计划任务“,来完成同样的工作。

这篇教程主要介绍了关于cron知识和一些配置方法

cron 命令
在下面的例子中,crontab命令显示了指定的语句将会在每隔一个小时自动运行:

0 * * * * wget -O - -q -t 1 http://www.example.com/cron.php

在上面的例子中, 0 * * * * 表示事务将要发生的时间,第一个数字表示”分钟”- 在这里,指的是在第0分钟,或者一个小时的开始。 (如果这个位置的值是10,事务将会在每个小时第10分钟执行)。其他的位置的数字分别表示为:小时,天,月,和星期。一个 “*”表示一个通配符号,意思是“每一次”。

这一行的其余部分是要被执行的命令, 在这里告诉服务器去”ping”这个url:http://www.example.com/cron.php

下面这个用图表表示了基本的crontab 语法

# +—————- 分钟 (0 - 59)

# | +————- 小时 (0 - 23)

# | | +———- 每月的第几天 (1 - 31)

# | | | +——- 月份 (1 - 12)

# | | | | +—- 没星期的第几天 (0 - 7) (星期日=0 or 7)

# | | | | |

* * * * * 需要被执行的命令,

这个corn命令的的意思就是 “在每年的每月的每日的第0分钟执行 ping http://www.example.com/cron.php 这个命令.”

我们为什么要使用cron
对于我们的站点来说,经常有一些需要经常自动完成的工作,比如周期定时清理日志文件,或者自动检查更新,甚至有些人用采集程序定时对其他网站内容进行采集,进行群发邮件等工作。

一般我们在虚拟主机上,使用cron,我们可以通过一个统一的 cron.php 来管理整个站点的cron工作,有两种方法来使用cron.php ,一种就想上面例子那样,使用wget 模拟访问cron.php. 一种就是使用php的shell执行方法(我前面文章有介绍)。

cron.php 一般放置在你的站点目录下,方便浏览器访问。比如你的网站是 www.example.com. 我建议你把cron.php放在 www.example.com 目录下,并确定它可以通过 http://www.example.com 访问。

对于一个中小网站来说,我建议你把cron job的工作周期定为一天执行一次,这样能减少服务器的压力

怎样设置一个cron job
cron 是根据预先制定好的”crontab”进行工作的, 一个crontab 是一个包含用来执行命令的文本文件,这个文本文件可以通过命令行接口来建立和编辑。当然,这是在你有shell管理权限的情况下(比如通过ssh登录)。 如果你通过一个基于网页的控制面板进行管理的话,比如cpanel 或者directadmin. 你可以使用面板提供的接口,具体操作请检查你的主机商的说明介绍。

通过命令行来编辑crontab,直接在shell下输入:

crontab -e

如果失败,请看下面cron问题解决一节内容。

添加下面其中的任意一行:

45 * * * * /usr/bin/lynx -source http://example.com/cron.php

45 * * * * /usr/bin/wget -O - -q -t 1 http://www.example.com/cron.php

45 * * * * curl –silent –compressed http://example.com/cron.php

上面这些语句将会通过 lynx,wget 或者curl 在每一小时的第45分钟来访问你的cron 页面,

我在这里提供了3条语句,是在lynx,wget或者crul 程序如果有其中有的没有安装,则可以选其他的代替(3条语句选择其中一条即可)

有很多方法来配置一个cron job ,如果你在独立主机,或者vps上,你拥有完全的访问crontab的功能, 你可以把上面3条中的任何语句直接粘贴即可,记住把example.com改成你自己的网址

如果你使用虚拟主机,你需要在你的主机控制面板里找到cron job 的配置位置。 部分主机控制面板提供了一个向导来帮助你进行cron的设置。

 

如果你的虚拟主机商没有提供cron job功能给你,你也可以使用下面几种方式:

1.写信给你的主机提供商,让它提供给你cron job访问。

2.使用在internate上可以设置cron job的服务器来设置crontab. 任何在internate上的unix,linux,或mac服务器都可以通过cron job来访问你的cron.php

3.使用线上的webcron服务 (比如, http://www.webcron.org),可以通过注册后,并在web界面上直接设置cron job。

4。自己写一个类似 drupal上的Poor man 模块(是一个可怜的cron job解决方案,一般在有人访问你的站点的时候才尝试通过js脚本去执行一下cron.php

corn job的一般问题:
如果你在执行 crontab -e 是提示权限不足, 可以使用 sudo来执行(一般unbutu上需要这么做):

sudu crontab -e

有时需要调整weget,lynx或者curl在crontab里的路径,比如。上面例子中这条语句:

45 * * * * /usr/bin/lynx -source http://example.com/cron.php

有可能,lynx被安装在你的服务器上的其他位置,或者并没有安装,可以通过下面命令找到它

whereis lynx

或者

which lynx

然后在crontab里对路径进行调整。 同样方法适合于wget 和curl.

安全脚本
可以使用下面语句限制cron.php外部访问,编辑你站点目录下的.htaccess文件,如果独立主机可以修改httpd.conf.添加下面语句:

<Files “cron.php”>

Order Deny,Allow

Deny from all

Allow from localhost

Allow from 127.0.0.1

Allow from xx.xx.xx.xx <– 你的ip地址

</Files>

好了cron job就大概介绍到这里了。 谢谢大家。。