如何使用Linux的Crontab定时执行PHP脚本的方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Linux的Crontab定时执行PHP脚本的方法相关的知识,希望对你有一定的参考价值。

我们先从相对比较复杂的服务器执行php谈起。服务器上安装了php,就可以执行php文件,无论是否安装了nginx或Apache这样的服务器环境软件。而Linux中,使用命令行,用CronTab来定时任务,又是绝佳的选择,而且也是效率最高的选择。
首先,进入命令行模式。作为服务器的linux一般都默认进入命令行模式的,当然,我们管理服务器也一般通过putty等工具远程连接到服务器,为了方便,我们用root用户登录。在命令行中键入:
crontab -e

之后就会打开一个文件,并且是非编辑状态,则是vi的编辑界面,通过敲键盘上的i,进入编辑模式,就可以编辑内容。这个文件中的每一行就是一个定时任务,我们新建一行,就是新建一条定时任务(当然是指这一行内按照一定的格式进行书写)。我们现在来举个例子,增加一行,内容如下:
00 * ** * lynx -dump https://www.yourdomain.com/script.php

这是什么意思呢?实际上上面这一行由两部分组成,前面一部分是时间,后面一部分是操作内容。例如上面这个,
00 * ** *

就是指当当前时间的分钟数为00时,执行该定时任务。时间部分由5个时间参数组成,分别是:
分 时 日 月 周

第1列表示分钟1~59 每分钟用或者 */1表示,/n表示每n分钟,例如*/8就是每8分钟的意思,下面也是类推
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
整个句子的后面部分就是操作的具体内容。
lynx -dump https://www.yourdomain.com/script.php

意思就是说通过lynx访问这个url。我们在使用中主要用到lynx、curl、wget来实现对url的远程访问,而如果要提高效率,直接用php去执行本地php文件是最佳选择,例如:
00 */2 * * * /usr/local/bin/php /home/www/script.php

这条语句就可以在每2小时的0分钟,通过linux内部php环境执行script.php,注意,这里可不是通过url访问,通过服务器环境来执行哦,而是直接执行,因为绕过了服务器环境,所以效率当然要高很多。
好了,已经添加了几条需要的定时任务了吧。点击键盘上的Esc键,输入“:wq”回车,这样就保存了设置的定时任务,屏幕上也能看到提示创建了新的定时任务。接下来就是好好写你的script.php了。
关于CronTab的更多用法这里就不介绍了,如果你想更灵活的使用这个定时任务功能,应该自己再去深入学习一下crontab。
参考技术A 下面介绍Crontab的两种方法。

一、在Crontab中使用PHP执行脚本

就像在Crontab中调用普通的shell脚本一样(具体Crontab用法),使用PHP程序来调用PHP脚本。
每一小时执行myscript.php如下:
. 代码如下:

# crontab -e
00 * * * * /usr/local/bin/php /home/john/myscript.php

/usr/local/bin/php为PHP程序的路径。

二、在Crontab中使用URL执行脚本

如果你的PHP脚本可以通过URL触发,你可以使用lynx或curl或wget来配置你的Crontab。
下面的例子是使用Lynx文本浏览器访问URL来每小时执行PHP脚本。Lynx文本浏览器默认使用对话方式打开URL。但是,像下面的,我们在lynx命令行中使用-dump选项来把URL的输出转换来标准输出。
. 代码如下:

00 * * * * lynx -dump http://www.poluoluo.com/myscript.php

下面的例子是使用CURL访问URL来每5分执行PHP脚本。Curl默认在标准输出显示输出。使用”curl -o”选项,你也可以把脚本的输出转储到临时文件。
. 代码如下:

*/5 * * * * /usr/bin/curl -o temp.txt http://www.poluoluo.com/myscript.php

下面的例子是使用WGET访问URL来每10分执行PHP脚本。-q选项表示安静模式。”-O temp.txt”表示输出会发送到临时文件。
. 代码如下:

*/10 * * * * /usr/bin/wget -q -O temp.txt http://www.poluoluo.com/myscript.php
本回答被提问者和网友采纳
参考技术B 1:使用crontab -e 可以编辑定时命令,配合 curl可以运行php页面的脚本
2:

例如

01 * * * * curl site/yourweb.php?do=youaction
第一个01表示,每小时的第一分钟执行一次。如果是5个*则表示,每一分钟执行一次。

linux使用crontab实现PHP执行计划定时任务

参考技术A

首先说说cron,它是一个linux下的定时执行工具。根用户以外的用户可以使用
crontab
工具来配置
cron
任务。所有用户定义的
crontab
都被保存在/var/spool/cron
目录中,并使用创建它们的用户身份来执行。要以某用户身份创建一个
crontab
项目,登录为该用户,然后键入
crontab
-e
命令来编辑该用户的
crontab。该文件使用的格式和
/etc/crontab
相同。当对
crontab
所做的改变被保存后,该
crontab
文件就会根据该用户名被保存,并写入文件
/var/spool/cron/username
中。cron
守护进程每分钟都检查
/etc/crontab
文件、etc/cron.d/
目录、以及
/var/spool/cron
目录中的改变。如果发现了改变,它们就会被载入内存。这样,当某个
crontab
文件改变后就不必重新启动守护进程了。
安装crontab:
yum
install
crontabs
说明:
/sbin/service
crond
start
//启动服务
/sbin/service
crond
stop
//关闭服务
/sbin/service
crond
restart
//重启服务
/sbin/service
crond
reload
//重新载入配置
查看crontab服务状态:service
crond
status
手动启动crontab服务:service
crond
start
查看crontab服务是否已设置为开机启动,执行命令:ntsysv
加入开机自动启动:
chkconfig
–level
35
crond
on
crontab命令:
功能说明:设置计时器。
语  法:crontab
[-u
<用户名称>][配置文件]

crontab
[-u
<用户名称>][-elr]
补充说明:cron是一个常驻服务,它提供计时器的功能,让用户在特定的时间得以执行预设的指令或程序。只要用户会编辑计时器的配置文件,就可以使
用计时器的功能。其配置文件格式如下:
Minute
Hour
Day
Month
DayOFWeek
Command
参  数:
-e
 编辑该用户的计时器设置。
-l
 列出该用户的计时器设置。
-r
 删除该用户的计时器设置。
-u<用户名称>
 指定要设定计时器的用户名称。
crontab
格式:
基本格式
:
分钟  
小时  
日  
月  
星期  
命令
*       
*     
*   
*    
*      
*
第1列表示分钟1~59
每分钟用*或者
*/1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列
表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
记住几个特殊符号的含义:
“*”代表取值范围内的数字,
“/”代表”每”,
“-”代表从某个数字到某个数字,
“,”分开几个离散的数字
#
Use
the
hash
sign
to
prefix
a
comment
#
+—————-
minute
(0

59)
#
|
+————-
hour
(0

23)
#
|
|
+———-
day
of
month
(1

31)
#
|
|
|
+——-
month
(1

12)
#
|
|
|
|
+—-
day
of
week
(0

7)
(Sunday=0
or
7)
#
|
|
|
|
|
#
*
*
*
*
*
command
to
be
executed
crontab几个例子如下:
(1)第一个例子。
30
21
*
*
*
/etc/init.d/nginx
restart
每晚的21:30重启
nginx。
(2)第二个例子,也就是本教程测试的例子
*
*
*
*
*
/usr/bin/php
-f
/root/test.php
>>
test.log
每一分钟执行/root/test.php文件,将结果输出到test.log中。
完成了上面基础工作后,就来看看怎么使用crontab定时执行PHP脚本:
(1)我在/root下新建test.php文件,内容如下:
复制代码
代码如下:
<?php
       
#!/usr/bin/php
-q
       
echo 
date(\'Y-m-d
H:i:s\')."from
http://www.phpddt.com
\\n";
?>
说明:你可以用whereis
php查找php执行文件位置。
(2)然后crontab
-e编写如下shell:
复制代码
代码如下:
*
*
*
*
*
/usr/bin/php
-f
/root/test.php
>>
test.log
说明:test.php必须为可执行文件:chmod
+x
test.php
测试结果很正常,截图如下:
当然你可以用使用crontab
-e继续添加任务,在/var/spool/cron下你可以看到一个root文件。
windows下直接用windows计划任务,通过bat打开网页就可以了。不像linux这么复制。

以上是关于如何使用Linux的Crontab定时执行PHP脚本的方法的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Linux的Crontab定时执行PHP脚本的方法

如何使用Linux的Crontab定时执行PHP脚本的方法

linux使用crontab实现PHP执行计划定时任务

linux定时执行php代码-定时计划crontab

Linux crontab定时任务执行php文件

linux crontab 每秒执行定时任务