php定时执行任务设置详解_php实例_脚本之家

今天有一个哥们问我这个问题,问题是这样的他有一个iis的服务器,要定时执行一个扫描的php脚本,这个怎么弄,每小时执行一次,下面是windows的设置

对于PHP本身并没有一套解决方案来执行定时任务,不过是借助sleep函数完成的。这种方就是要提前做一些配置,如实现过程:

一、准备环境

在linux中输入命令

1)在控制面板中双击任务计划,打开了Windows任务计划窗口。

复制代码
代码如下:ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执行.
set_time_limit;// 通过set_time_limit可以让程序无限制的执行下去
$interval=60*30;// 每隔半小时运行 do{ //这里是你要执行的代码 sleep;//
等待5分钟 }while;

服务器:linux+nginx+mysql+php 环境

复制代码 代码如下:crontab -e

2)双击添加任务,打开任务计划向导。点击下一步。

不过关于这种方式我有一些担心性能方面的问题,不过也是个临时的方法。

框架:laravel 5.5

然后使用vim的命令编辑打开的文件,输入

3)点击浏览,选择要运行的程序

本人推荐的方式采用脚本来实现,利用OS本身的定时任务机制,windows上场利用bat脚本。不过本人没有在window上尝试过。那我就讲讲在linux中的实现。

需求:每天晚上1点执行定时操作

复制代码 代码如下:0 * * * *
/usr/bin/php -f /home/userxxx/update.php

4 ) 输入计划名称,选择 每天

如果你的web server是基于linux的,那么可以采用linux下的cron job
来完成。以RedHat5 为例,我们只需要预先要定时执行的逻辑代码。例如demo.php

二、定时任务的步骤

保存,退出,好了,现在系统会在每个0点自动执行update.php脚本,脚本中可以编写数据库执行,自动发邮件等功能。

5)设置起始时间、选择每天、起始日期。下一步。

复制代码 代码如下:

1、根据文档,创建命令

注:直接写成 0 * * * * php -f /home/userxxx/update.php将不会起作用。

6)输入密码,该密码是该系统的用户名的密码。下一步

然后是吧php用shell脚本一封装,在shell脚本中调用demo.php,demo.sh代码如下:

首先进入到laravel/app/console 目录下,Console 目录包含应用所有自定义的
Artisan 命令,这些命令类可以使用 make:command 命令生成。该目录下还有
Console/Kernel 类,在这里可以注册自定义的 Artisan 命令以及定义调度任务。

另外cronjob的格式为:

7)选择在单击完成时,打开此任务的高级属性。

复制代码 代码如下:#!/bin/bash#if you
php install to /usr/local/php//usr/local/php/bin/php
/home/xx-user/demo.php

例如我们创建一个定时任务,名称为Test:

MIN HOUR DOM MON DOW CMD

8)在高级属性窗口中,选择日程安排标签,选择高级

完成shell脚本的编写之后,确保它有足够的这行权限,例如:/bin/chmod u+x
demo.sh.

//这里使用laravel给定的 php artisan来生成命令,此处的Test就是我们要生成的文件//这里的artisan代表的不仅仅是laravel自带的命令,他其实是laravel下的artisan目录,因为这个目录没有x,也就是可执行权限,所以不能使用 ./artisan 来执行,只能通过php来执行php artisan make:command Test

Field

9)高级计划选项中,勾选重复任务,持续时间:设为24小时。

然后配置linux上的cronjob,cronjob是linux上默认安装的。如果你的任务是需要按小时、天、周、月来执行的话,那么你直接可以将你的demo.sh脚本拷贝到

2、创建完之后,打开console目录下的commands目录,我们会发现里面已经有了一个文件

Description

10)即可达到每小时更新一次,一天24小时工作了。

/etc/cron.hourly 、/etc/cron.daily 、/etc/cron.weekly、/etc/cron.monthly
就ok了,这样就可以完成你的任务了
。如果到某个时间点想移除定时任务,那就从上面这些folder中move到其它地方或者直接删除掉就ok了。

service = $service; } /** * Execute the console command. *这里就是我们执行操作的地方,里面是command要处理的业务。根据我们的需求, *调用类中的calculateData()方法,该方法是我们自己的需求逻辑部分。 * @return mixed */ public function handle() { try { $this->service->calculateData(); } catch  { $this->error; } // line()方法是command类中自带的方法,可以输出我们自定义的信息 $this->line('calculate Data Success!'); }}

Allowed Value

然后我们继续解决怎么支持脚本的定时的执行,这样就待写个脚本,譬如test.bat

如果你的脚本有特殊的执行时间,例如每个星期的周二,或者是每个月的15号执行。那么你就需要配置属于你自己的cron
job.

3、定时命令创建好之后,我们需要修改kernel.php文件

MIN Minute field 0 to 59 HOUR Hour field 0 to 23 DOM Day of Month 1-31
MON Month field 1-12 DOW Day Of Week 0-6 CMD Command Any command to be
executed.

我的php安装到D盘,用的是php-cgi.exe

关于cron的特殊的配置请参考:

kernel.php文件里面,主要是定义命令的调度时间,定义命令的执行先后顺序等。

使用可以划定范围

复制代码 代码如下:D:cd phpphp.exe
D:/wwwroot/dingshi.php //定时执行的脚本文件的路径

这里我就按照每天的上午12点到下午的14点钟之间每2分钟运行一次这个脚本,那么配置如下:

这部分参考laravel官方文档:

如:0 0-6 * * * command 表示每天0-6点整执行command

我们可以测试一下dingshi.php

首先在linux的命令行中执行crontab -e ,然后把规则输入到里面:

使用可以枚举时间

复制代码 代码如下:file_put_contents;

复制代码 代码如下:*/2 12-14 * * *
/tmp/demo.sh

4、我的kernel.php文件

如: 0,15,30,45 * * * * command
表示每个小时的0分,15分,45分,30分会执行command

我们双击一下test.bat,然后看下a.php是不是写入了test,我们的计划任务运行的程序就是test.bat这样就会自动执行了!

带输入完成之后按键盘上的“Esc”键,然后输入:wq,编辑页面就退出了。然后你可以用crontab
-l 来查看你刚编辑的cron job.

command('emails:send --force')->daily(); * $schedule->command(EmailsCommand::class, ['--force'])->daily(); * * @var array */ protected $commands = [ Test::class, CalculateData::class, UpdateOffset::class, ]; /** * Define the application's command schedule. * 注: * 1、这个方法按照自己的需求,确定定时方法的执行顺序。通过after,before等关键词来控制 * 2、此处相当于规定同意的定时执行时间,如都在0:30分执行下面的几个定时任务 * @param \Illuminate\Console\Scheduling\Schedule $schedule * @return void */ protected function schedule { // 每天凌晨 0.45 执行同步 aliyun 数据的任务,并发送邮件给 *** $schedule->command ->after { //更新偏移量,after里面不能加参数 Artisan::call ->after { // 执行同步数据命令完成后 则执行计算数据任务 Artisan::call; } /** * Register the commands for the application. * //这个部分是laravel自动生成的,引入我们生成的命令文件 * @return void */ protected function commands() { $this->load; require base_path; }}

使用可以指定间隔

以上就是php定时执行任务的设置方法了,非常简单,小伙伴们自由扩展下就可以了,希望大家能够喜欢

到此时特殊的cron
也就完成了。例如你刚才是用linux下的demo账户来完成上面的步骤,那么还有一个简单的方法就是直接可以编辑/var/spool/cron/demo
这个文件,可以直接

关于具体的调度方法schedule(),大家可以去laravel文档看看,里面可以规定很多东西。我这边是使用的钩子函数。在同时要执行多个定时任务的时候,通过after,before等方法,可以让多个定时任务变得有序起来。

如:* */4 * * * command表示每四小时执行command

修改你的cron job. 例如 :vi /var/spool/cron/demo

三、执行我们的定时

组合用法

利用OS的方式来管理你的定时任务是很快捷的,而且不用你担心性能的问题,除非你的脚本本身存在一些问题。这样的方式易于维护,可以修改定时执行的计划,也可以轻松的移除和新增其它的定时任务。

虽然laravel的定时任务一直都说的很强大,但本质上还是离不开服务器上的cron脚本。。

0-10/2 * * * * command表示在前10分钟内每隔2分钟执行command

1、先查看服务器上的定时条目

crontab -l

2、新增或编辑cron 条目

crontab -e

3、在里面新增我们写好的方法路径

这里面新加上我们的定时任务。

第一是 规定定时任务的执行时间

第二是 要把项目的artisan目录路径写对

第三
schedule:run就是执行咱们之前写的任务调度,也就是kernel.php文件中的schedule方法。

如果是大家自己测试的话,可以随便写个定时任务,每分钟执行以下,这样就能准确的知道自己的定时任务是否正确了。

以上这篇关于laravel5.5的定时任务详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章