matfish/craft-console-scheduler

在代码中安排控制台命令

2.0.0 2024-04-13 14:49 UTC

This package is auto-updated.

Last update: 2024-09-13 15:37:53 UTC


README

此软件包添加了从代码中直接安排控制台命令的能力。

为什么?

虽然你可能为服务器上需要安排的每个任务编写cron配置条目,但这很快就会变得痛苦,因为你的任务安排没有记录到源代码控制中,你必须SSH到你的服务器来查看现有的cron条目,添加额外的条目或更改计划。

此软件包将允许你

  1. 只定义一个命令在 crontab 中,其余将由代码处理。
  2. 使用直观易读的流畅语法来定义频率。
  3. 将所有执行命令记录到专门的 console-scheduler-{date}.log 文件中,包括命令可能生成的任何输出和退出代码。

安装

  1. 包含软件包
composer require matfish/craft-console-scheduler
  1. 安装插件
php craft plugin/install console-scheduler

初始设置

将以下行添加到你的 crontab

* * * * * /var/www/my-site/php craft console-scheduler/schedule >> /dev/null 2>&1

这将确保调度器每分钟运行一次,并检查待运行的命令。建议根据项目所需的最高频次来设置频率。例如,如果最频繁的命令是每小时运行一次,就没有必要每分钟调用调度器,可以使用 0 * * * * 代替

使用方法

  1. 创建一个 config/console-scheduler.php 文件
  2. 根据以下示例添加计划
return [
    'schedules' => static function (\matfish\ConsoleScheduler\Schedule\SchedulesCollection $schedule) {
        $schedule->command('activity-logs/logs/prune --days=30 --interactive=0')->monthly();
        $schedule->command('cache/clear')->daily()->at('23:00');
    }
];

支持频率

  • everyMinute()
  • everyTwoMinutes()
  • everyThreeMinutes()
  • everyFourMinutes()
  • everyFiveMinutes()
  • everyTenMinutes()
  • everyFifteenMinutes()
  • everyThirtyMinutes()
  • hourly()
  • hourlyAt($time)
  • everyOddHour()
  • everyTwoHours()
  • everyThreeHours()
  • everyFourHours()
  • everySixHours()
  • daily()
  • dailyAt($time)
  • twiceDaily($hour1 = 1,$hour2 = 13)
  • twiceDailyAt($hour1 = 1,$hour2 = 13, $offset = 0)
  • weekdays()
  • weekends()
  • days($day1,$day2, $day3, etc) - 具体的星期几
  • sundays()
  • mondays()
  • tuesdays()
  • wednesdays()
  • thrusdays()
  • fridays()
  • satrudays()
  • weekly()
  • weeklyOn($dayOfWeek, $time = '0:0')
  • monthly()
  • monthlyOn($dayOfMonth, $time)
  • twiceMonthly($firstDay = 1, $secondDay = 16, $time = '0:0')
  • lastDayOfMonth($time = '0:0')
  • quarterly()
  • quarterlyOn($dayOfQuarter = 1, $time = '0:0')
  • yearly()
  • yearlyOn($month = 1, $dayOfMonth = 1, $time = '0:0')

没有指定时间的函数可以跟着一个使用流畅语法的 at 方法。

如果您需要更多控制,您还可以使用原始的 cron 方法来自定义您的频率,例如

$schedule->command('my/cool/command')->cron('*/5 * 3 7 4'); // Every 5 minutes, on day 3 of the month, and on Thursday, only in July

测试

CRAFT_ENVIRONMENT=dev 时,您可以将 --test 选项传递给调度器(在 Y-m-d H:i 格式下),以模拟一个不是现在的时间,并确保命令按预期运行。例如

php craft console-scheduler/schedule --test="2024-01-26 19:05" 

--test 选项将在任何其他环境中被忽略。

许可证

您可以在开发环境中尝试使用Console Scheduler,直到您满意。一旦您的网站上线,您需要为该插件购买许可证。许可证可通过Craft插件商店购买。

有关更多信息,请参阅Craft的商业插件许可

要求

此插件需要Craft CMS 4.0.0或更高版本。

致谢

本包深受 Laravel 的任务调度功能启发。

贡献指南

社区是开源项目的心脏。我们总是乐意接受用户的有建设性的反馈,以逐步改进产品及/或文档。

以下是一些简单的规则,旨在促进互动并防止误解。

请只为错误报告开启新的问题。对于功能请求和问题,请打开新的讨论,并在标题前加上[FR]。

如果您想支持一个现有的功能请求,只需给OP投票即可,同时避免+1回复。