Top Menu

在Debian中添加定时任务访问指定URL

通常,一些需要经常重复执行的操作,我们可以将它添加到cron任务列表中,来实现自动化。这些操作有些可以通过Bash执行,而有些则必须通过URL方式调用,那么要如何在cron中定时访问这些URL呢?

PHP CLI 方法

此方法最为常见,PHP4.3之后,支持调用PHP命令直接执行本地的.php程序。通常,使用此方法的cron规则格式如下

但是,使用PHP CLI有一个明显的缺点,就是没有办法传递Get参数,因为根据官方文档,CLI模式只能以文件方式执行,所以类似于 ?page=2 之类的Get参数是不能使用的,如果使用了,那么该条cron命令也不会执行。所以需要带参数访问的URL通常都不能使用PHP CLI方法。

不过此种方法的优点也很明显,就是不受webServer的超时限制,常用于激活需要执行长时间的批量任务。

Curl 方法

由于PHP CLI不支持传递参数,那么有什么方法可以模拟浏览器访问带参数的指定网址么?答案就是使用Curl。

用Curl改写之前的定时任务,那么cron规则就是下面这样

这样一条规则执行的时候就相当于在浏览器中直接访问了该地址,可以看出来,使用Curl的话,不但可以访问本地的网址,还可以定时访问任意外网地址,

另外,如果只需要激活程序而不关心页面的输出结果,那么可以使用curl的 --head 参数,只获取该网址的头部信息,减小网络带宽的占用。

Wget 方法

wget方法比较特殊,因为它的本意是用做下载的,而这里也可以使用它的访问指定地址的功能,来达到激活的作用

同样wget也可以只获取目标的文件头信息,使用的参数是 --spider

Know more

PHP CLI其实是可以传递参数的,不过是通过类似于Bash的参数传递方式

使用方法是在文件名称后面空格然后分别输入需要传递的参数,例如

之后这些参数可以在程序内通过调用 $argv 变量数组来访问对应参数,和通过调用 $argc 变量获得传递参数的数量。

Via:官方文档

使用which查找程序绝对路径

cron默认情况下可以自动识别出在/usr/bin下的程序,如果cron无法识别,可以用which命令查找并更改为绝对地址

cron的时间设置

> /dev/null 2>&1的含义

 

There are no comments yet

  • Hello, guest

Powered by WordPress. Designed by WooThemes