Download the PHP package yzh52521/schedule without Composer

On this page you can find all versions of the php package yzh52521/schedule. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package schedule

schedule

thinkphp 任务调度

代码实现主要参考 laravel Schedule 任务调度 https://learnku.com/docs/laravel/10.x/scheduling/14875

具体用法:

第一步 运行指令

会在项目目录app下生成一个 ConsoleScheduling 类

第二步,在 event.php 里为 AppInit 事件添加监听类。

时间表范例

定义调度

我们计划每天午夜执行一个闭包,这个闭包会执行一次数据库语句去清空一张表

除了调用闭包这种方式来调度外,你还可以调用 可调用对象。 可调用对象是简单的 PHP 类,包含一个 __invoke 方法:

如果你想查看任务计划的概述及其下次计划运行时间,你可以使用 schedule:list think 命令

thinkphp 命令调度

调度方式不仅有调用闭包,还有调用 Thinkphp commands 和操作系统命令。例如,你可以给 command 方法传递命令名称或类来调度一个 Thinkphp 命令:

当使用命令类名调度 Thinkphp 命令时,你可以通过一个数组传递附加的命令行参数,且这些参数需要在命令触发时提供:

队列任务调度

job 方法可以用来调度 queued job。此方法提供了一种快捷方式来调度任务,而无需使用 call 方法创建闭包来调度任务:

job 方法提供了可选的第二,三参数,分别指定任务将被放置的队列名称及连接:

Shell 命令调度

exec 方法可发送命令到操作系统:

调度频率选项

我们已经看到了几个如何设置任务在指定时间间隔运行的例子。不仅如此,你还有更多的任务调度频率可选:

方法 描述
->cron(' *'); 自定义 Cron 计划执行任务
->everySecond(); 每秒钟执行一次任务
->everyTwoSeconds(); 每 2 秒钟执行一次任务
->everyFiveSeconds(); 每 5 秒钟执行一次任务
->everyTenSeconds(); 每 10 秒钟执行一次任务
->everyFifteenSeconds(); 每 15 秒钟执行一次任务
->everyTwentySeconds(); 每 20 秒钟执行一次任务
->everyThirtySeconds(); 每 30 秒钟执行一次任务
->everyMinute(); 每分钟执行一次任务
->everyTwoMinutes(); 每两分钟执行一次任务
->everyThreeMinutes(); 每三分钟执行一次任务
->everyFourMinutes(); 每四分钟执行一次任务
->everyFiveMinutes(); 每五分钟执行一次任务
->everyTenMinutes(); 每十分钟执行一次任务
->everyFifteenMinutes(); 每十五分钟执行一次任务
->everyThirtyMinutes(); 每三十分钟执行一次任务
->hourly(); 每小时执行一次任务
->hourlyAt(17); 每小时第十七分钟时执行一次任务
->everyTwoHours(); 每两小时执行一次任务
->everyThreeHours(); 每三小时执行一次任务
->everyFourHours(); 每四小时执行一次任务
->everySixHours(); 每六小时执行一次任务
->daily(); 每天 00:00 执行一次任务
->dailyAt('13:00'); 每天 13:00 执行一次任务
->twiceDaily(1, 13); 每天 01:00 和 13:00 各执行一次任务
->twiceDailyAt(1, 13, 15); 每天 1:15 和 13:15 各执行一次任务
->weekly(); 每周日 00:00 执行一次任务
->weeklyOn(1, '8:00'); 每周一 08:00 执行一次任务
->monthly(); 每月第一天 00:00 执行一次任务
->monthlyOn(4, '15:00'); 每月第四天 15:00 执行一次任务
->twiceMonthly(1, 16, '13:00'); 每月第一天和第十六天的 13:00 各执行一次任务
->lastDayOfMonth('15:00'); 每月最后一天 15:00 执行一次任务
->quarterly(); 每季度第一天 00:00 执行一次任务
->quarterlyOn(4, '14:00'); 每季度第四天 14:00 运行一次任务
->yearly(); 每年第一天 00:00 执行一次任务
->yearlyOn(6, 1, '17:00'); 每年六月第一天 17:00 执行一次任务
->timezone('America/New_York'); 为任务设置时区

这些方法与额外的约束条件相结合后,可用于创建在一周的特定时间运行甚至更精细的计划任务。例如,在每周一执行命令:

下方列出了额外的约束条件:

方法 描述
->weekdays(); 限制任务在工作日执行
->weekends(); 限制任务在周末执行
->sundays(); 限制任务在周日执行
->mondays(); 限制任务在周一执行
->tuesdays(); 限制任务在周二执行
->wednesdays(); 限制任务在周三执行
->thursdays(); 限制任务在周四执行
->fridays(); 限制任务在周五执行
->saturdays(); 限制任务在周六执行
->days(array|mixed); 限制任务在每周的指定日期执行
->between($startTime, $endTime); 限制任务在 $startTime 和 $endTime 区间执行
->unlessBetween($startTime, $endTime); 限制任务不在 $startTime 和 $endTime 区间执行
->when(Closure); 限制任务在闭包返回为真时执行

周几(Day)限制

days 方法可以用于限制任务在每周的指定日期执行。举个例子,你可以在让一个命令每周日和每周三每小时执行一次:

不仅如此,你还可以使用 schedule\scheduling\Schedule 类中的常量来设置任务在指定日期运行:

时间范围限制

between 方法可用于限制任务在一天中的某个时间段执行:

同样, unlessBetween 方法也可用于限制任务不在一天中的某个时间段执行:

真值检测限制

when 方法可根据闭包返回结果来执行任务。换言之,若给定的闭包返回 true,若无其他限制条件阻止,任务就会一直执行:

skip 可看作是 when 的逆方法。若 skip 方法返回 true,任务将不会执行:

当链式调用 when 方法时,仅当所有 when 都返回 true 时,任务才会执行。

时区

timezone 方法可指定在某一时区的时间执行计划任务:

若想给所有计划任务分配相同的时区,那么需要在 app/ConsoleScheduling.php 类中定义 scheduleTimezone 方法。该方法会返回一个默认时区,最终分配给所有计划任务:

注意

请记住,有些时区会使用夏令时。当夏令时发生调整时,你的任务可能会执行两次,甚至根本不会执行。因此,我们建议尽可能避免使用时区来安排计划任务。

避免任务重复

默认情况下,即使之前的任务实例还在执行,调度内的任务也会执行。为避免这种情况的发生,你可以使用 withoutOverlapping 方法:

在此例中,若 email:send Thinkphp 命令 还未运行,那它将会每分钟执行一次。如果你的任务执行时间非常不确定,导致你无法准确预测任务的执行时间,那 withoutOverlapping 方法会特别有用。 如有需要,你可以在 withoutOverlapping 锁过期之前,指定它的过期分钟数。默认情况下,这个锁会在 24 小时后过期

上面这种场景中,withoutOverlapping 方法使用应用程序的 缓存 获取锁。如有必要,可以使用 schedule:clear-cache Thinkphp 命令清除这些缓存锁。这通常只有在任务由于意外的服务器问题而卡住时才需要。

任务只运行在一台服务器上

注意
要使用此功能,你的应用程序必须使用 memcached 或 redis  缓存驱动程序作为应用程序的默认缓存驱动程序。

命名单服务器作业

有时,你可能需要使用不同的参数调度相同的作业,同时使其仍然在单个服务器上运行作业。为此,你可以使用 name 方法为每个作业定义一个唯一的名字:

如果你使用闭包来定义单服务器作业,则必须为他们定义一个名字

后台任务

默认情况下,同时运行多个任务将根据它们在 schedule 方法中定义的顺序执行。如果你有一些长时间运行的任务,将会导致后续任务比预期时间更晚启动。 如果你想在后台运行任务,以便它们可以同时运行,则可以使用 runInBackground 方法:

注意

runInBackground 方法只有在通过 commandexec 方法调度任务时才可以使用

维护模式

当应用处于 维护模式 时,任务将不会运行。因为我们不想调度任务干扰到服务器上可能还未完成的维护项目。不过,如果你想强制任务在维护模式下运行,你可以使用 evenInMaintenanceMode 方法

运行调度程序

现在,我们已经学会了如何定义计划任务,接下来让我们讨论如何真正在服务器上运行它们。schedule:run Thinkphp 命令将评估你的所有计划任务,并根据服务器的当前时间决定它们是否运行。

本地运行调度程序

通常,你不会直接将 cron 配置项添加到本地开发计算机。你反而可以使用 schedule:work Thinkphp 命令。该命令将在前台运行,并每分钟调用一次调度程序,直到你终止该命令为止

任务输出

schedule 调度器提供了一些简便方法来处理调度任务生成的输出。首先,你可以使用 sendOutputTo 方法将输出发送到文件中以便后续检查:

如果希望将输出追加到指定文件,可使用 appendOutputTo 方法:

使用 emailOutputTo 方法,你可以将输出发送到指定邮箱。在发送邮件之前,你需要先安装

如果你只想在命令执行失败时将输出发送到邮箱,可使用 emailOutputOnFailure 方法:

注意

emailOutputTo, emailOutputOnFailure, sendOutputTo 和 appendOutputTo 是 command 和 exec 独有的方法。

任务钩子

使用 beforeafter 方法,你可以决定在调度任务执行前或者执行后来运行代码:

使用 onSuccessonFailure 方法,你可以决定在调度任务成功或者失败运行代码。失败表示 schedule 任务 或系统命令以非零退出码终止:

Pinging 网址

使用 pingBeforethenPing 方法,你可以在任务完成之前或完成之后来 ping 指定的 URL。当前方法在通知外部服务,如计划任务在将要执行或已完成时会很有用:

只有当条件为 true 时,才可以使用 pingBeforeIfthenPingIf 方法来 ping 指定 URL

当任务成功或失败时,可使用 pingOnSuccesspingOnFailure 方法来 ping 给定 URL。失败表示 schedule 调度 或系统命令以非零退出码终止:

所有 ping 方法都依赖 Guzzle HTTP 库 使用 Composer 包管理器将 Guzzle 安装到项目中

事件

如果需要,你可以监听调度程序调度的 事件。通常,事件侦听器映射将在你的应用程序的 event.php里配置 如下:

支持我

您的认可是我继续前行的动力,如果您觉得schedule对您有帮助,请支持我,谢谢您!


All versions of schedule with dependencies

PHP Build Version
Package Version
Requires php Version >=8.0.2
dragonmantank/cron-expression Version ^3.3
nesbot/carbon Version ^2.0
symfony/process Version ^6.0
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package yzh52521/schedule contains the following files

Loading the files please wait ....