导航:首页 > 编程语言 > linux定时任务执行php

linux定时任务执行php

发布时间:2022-06-04 07:31:35

‘壹’ 如何用php程序去创建linux定时任务

应该是用 -f 参数直接读取一个文件,这样不用交互输入了。
不过 at 总觉得有点老。

‘贰’ php定时执行任务的几个方法

PHP定时执行的三种方式实现
1、windows 的计划任务 2、linux的脚本程序 3、让web浏览器定时刷新

具体实现
1、windows计划任务

PHP很少在win服务器上跑,具体实现也不再深究,看网上实现的原理大概是写bat脚本,然后让window任务添加执行这个bat脚本。
2、linux 的脚本实现
这里主要使用到crontab这个命令
使用方式 :

复制代码 代码如下:crontab filecrontab [ -u user ] [ -u user ] { -l | -r | -e }

说明 :

crontab是用来让使用者在固定时间或固定间隔执行程式之用

使用crontab写shell脚本,然后让PHP调用shell,这个是利用linux的特性,应该还不算PHP自身语言的特性

3、PHP实现定时执行计划任务
使用php让浏览器刷新需要解决几个问题
PHP脚本执行时间限制,默认的是30m 解决办法:set_time_limit();或者修改PHP.ini 设置max_execution_time时间(不推荐)
如果客户端浏览器关闭,程序可能就被迫终止,解决办法:ignore_user_abort即使关闭页面依然正常执行
如果程序一直执行很有可能会消耗大量的资源,解决办法使用sleep使用程序休眠一会,然后在执行
PHP定时执行的代码:

<?php ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执行. set_time_limit(3000);// 通过set_time_limit(0)可以让程序无限制的执行下去 $interval=5;// 每隔5s运行 //方法1--死循环 do{ echo '测试'.time().'<br/>'; sleep($interval);// 等待5s }while(true); //方法2---sleep 定时执行 require_once './curlClass.php';//引入文件 $curl = new httpCurl();//实例化 $stime = $curl->getmicrotime(); for($i=0;$i<=10;$i++){ echo '测试'.time().'<br/>'; sleep($interval);// 等待5s } ob_flush(); flush(); $etime = $curl->getmicrotime(); echo '<hr>'; echo round(($etime-stime),4);//程序执行时间
测试的时候发现这个效率并不是很高。

总结:

个人感觉PHP定时执行任务的效率不是很高,建议关于定时执行任务的工作还是交给shell来做吧。

‘叁’ linux下如何定时访问本机上的某个php脚本文件

自己编写crontab设定计划任务就是了,
那个服务就是做这些定时的,自动化的工作用的。要写什么脚本的,一个命令搞定。
给你个手册页自己看吧。
补充回答:
运行这个命令:
crontab
-e
此命令将打开一个文本编辑器以添加新任务。
*
20
*
*
*
rm
-rf
/root/febhost/dat/*
/root/febhost/log/*
用对应的文本编辑器命令保存退出(vi编辑器是按esc后打:wq)
如果你对这种方式不熟悉,也可以直接改/etc/crontab,我看到你是要删除root文件夹内的目录,假设你有root权限(因为/etc/crontab所有者是root,并且只有以root身份执行删除命令才能删除root
home内的文件),用以下命令打开此文件:
vi
/etc/crontab
将光标移动至最后一行,按o键新开一行输入以下内容:
*
20
*
*
*
root
rm
-rf
/root/febhost/dat/*
/root/febhost/log/*
给你解释下此行的含义吧,前五个以4个空格分隔开的值依次表示:分、时、日、月、周,如果取所有值就是打*号,如果你想周期性的运行一个任务,crontab也接受范围指定,比如说一天中的早8点到晚6点每隔一小时(就是每两小时,将会在8,10,12,14,16,18执行)执行你这个删除命令这样写:
*
8-18/2
*
*
*
root
rm
-rf
/root/febhost/dat/*
/root/febhost/log/*
第一个字段是分钟,取值范围:0-59
第二个字段是小时。取值范围:0-23
第三个字段是一个月中的第几天,取值范围:1-31
第四个字段是一年中的第几个月,取值范围:1-12
最后一个字段是一个星期中的第几天,以星期天开始依次的取值为0~7,0、7都表示星期天。
下一个字段是执行该命令的用户身份,这里是root用户,最后一个字段就是定时运行的命令。

‘肆’ linux下使用crontab实现定时PHP计划任务失败的原因分析

很多人在linux下使用crontab实现PHP执行定时任务却未能成功,不能生成缓存。本文就linux下使用crontab实现定时PHP计划任务失败的原因做一分析。
一般我们linux定时执行php代码例如:
*/5
*
*
*
*
/usr/local/php/bin/php
/home/wwwroot/1.php
其实这样是可以执行php代码的。
但是为什么很多朋友在1.php写的生成一个缓存文件没有生成呢?
这个要涉及到crontab执行php的相对路径问题.
注意在执行文件中,有包含文件的,如:
include_once'./mysql.php';
当php代码中,用的是相对路径时,只有进入到那个目录下,
然后执行/usr/local/php/bin/php
/home/wwwroot/1.php
才能引用mysql.php生效。
解决方法如下:
*/10
*
*
*
*
cd
/home/wwwroot
&&
/usr/local/php/bin/php
/home/wwwroot/1.php
同时也这样缓存才能生成在
/home/wwwroot。此处需要特别注意!
这是大部分写的所谓linux定时执行php没有提到的,也最容易产生误区的。
当然方法还有很多,还可以设置环境变量之类的。这个只是一个简单的方法。

‘伍’ linux怎么定时执行php文件

安装php环境就行了。脚本开头加上php环境变量。

‘陆’ linux如何创建PHP定时任务

首先创建一个PHP文件:示例内容如下:

<?php
$ch=curl_init();
//设置请求
curl_setopt($ch,CURLOPT_URL,"写上要请求的URL");
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_HEADER,0);
$output=curl_exec($ch);
curl_close($ch);
echo date("Y-m-d H:i:s",time())."_".$output."\r\n";
然后给文件可执行权限:chmod +x demo.php

然后修改定时任务执行的文件:使用命令行:crontab -e 打开定时任务文件,加入:

30 17 * * * /usr/bin/php -f /home/task/crontab.php >> /home/task/task.log
1
解释一下时间的概念,比如像上面这就相当于每天的17:30分执行任务。完成以上就可以开启计划任务了,使用命令行:
service cron start
以上就可以开启这个PHP定时任务了,同时会将echo 的返回值写入到task.log文件中。

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

首先说说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
";
?>
说明:你可以用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定时任务执行php相关的资料

热点内容
服务器的应用镜像是什么 浏览:151
命令行的使用方法 浏览:511
怎么让图片左右压缩 浏览:653
白鹿原pdf 浏览:431
人民币怎么算法 浏览:756
什么app可以听懂刺猬说话 浏览:600
安卓机内存小如何扩大 浏览:127
粉丝服务器怎么和安卓手机通信 浏览:400
初中数学竞赛pdf 浏览:570
linux自定义安装 浏览:190
fpic要在每个编译文件 浏览:868
编译原理广义推导的定义 浏览:913
怎么在已有的压缩文件里加密码 浏览:519
安卓手机怎么设置系统软件 浏览:768
php前端java后端 浏览:796
数据框转换为矩阵python 浏览:76
单片机程序反汇编 浏览:855
编程和实物不一样 浏览:880
天官赐福小说什么app可看 浏览:210
原车空调改压缩机 浏览:105