matfish / craft-console-scheduler
在代码中安排控制台命令
2.0.0
2024-04-13 14:49 UTC
Requires
- craftcms/cms: ^5.0
- dragonmantank/cron-expression: ^3.3
README
此软件包添加了从代码中直接安排控制台命令的能力。
为什么?
虽然你可能为服务器上需要安排的每个任务编写cron配置条目,但这很快就会变得痛苦,因为你的任务安排没有记录到源代码控制中,你必须SSH到你的服务器来查看现有的cron条目,添加额外的条目或更改计划。
此软件包将允许你
- 只定义一个命令在
crontab
中,其余将由代码处理。 - 使用直观易读的流畅语法来定义频率。
- 将所有执行命令记录到专门的
console-scheduler-{date}.log
文件中,包括命令可能生成的任何输出和退出代码。
安装
- 包含软件包
composer require matfish/craft-console-scheduler
- 安装插件
php craft plugin/install console-scheduler
初始设置
将以下行添加到你的 crontab
* * * * * /var/www/my-site/php craft console-scheduler/schedule >> /dev/null 2>&1
这将确保调度器每分钟运行一次,并检查待运行的命令。建议根据项目所需的最高频次来设置频率。例如,如果最频繁的命令是每小时运行一次,就没有必要每分钟调用调度器,可以使用 0 * * * *
代替
使用方法
- 创建一个
config/console-scheduler.php
文件 - 根据以下示例添加计划
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回复。