lekoala / silverstripe-simple-jobs
适用于 SilverStripe CMS 的简单工作模块
Requires
Requires (Dev)
- phpunit/phpunit: ^9.5
- silverstripe/recipe-cms: ^5
- squizlabs/php_codesniffer: ^3.5
README
一个替代运行 cron 任务的解决方案,使用简单的 HTTP 请求。
此模块需要 SilverStripe CronTask。
为什么?
配置 cron 作业很痛苦。也许你没有适当的访问权限,或者可能很难确保 php 在正确的用户下运行。这就是为什么你可以简单地依赖外部服务来触发一个 HTTP 请求到特定的脚本,该脚本将处理你需要运行的任何任务。
如何设置
使用外部服务
简单地每 5 分钟调用以下 URL:yoursite.com/simple-jobs/trigger
为了做到这一点,你可以使用例如 UptimeRobot。作为额外的奖励,你还可以监控你的 web 服务器是否响应,这总是很好的。
使用你自己的请求
不喜欢使用 UptimeRobot 这样的服务?请随意使用 Windows 计划任务 或其他服务器使用 cron。
例如
* * * * * wget -O - http://yoursite.com/simple-jobs/trigger >/dev/null 2>&1
使用常规 cron 作业
您还可以使用此模块类似地使用基本 crontask 模块,同时获得所有日志优点。
将以下命令添加到您的 cron 定义中
* * * * * www-data /usr/bin/php /path/to/silverstripe/docroot/framework/cli-script.php simple-jobs/trigger
启用 BasicAuth
为了防止恶意用户通过调用 URL 拳击您的网站,您可以通过在配置文件中定义以下内容来启用 BasicAuth。
LeKoala\SimpleJobs\SimpleJobsController: username: "myusername" password: "mypassword"
并确保 UptimeRobot 或您使用的任何系统触发 HTTP 请求时发送适当的头信息。
测试
您还可以通过访问 yoursite.com/simple-jobs 来测试您的任务。
此功能仅在开发模式激活时启用。您可以在列表中单击任何任务,并根据其计划运行它或强制任务运行。
如果需要,您还可以手动触发作业。只需访问 /simple-jobs/trigger_manual/YourClass。
日志结果
作为额外的奖励,此模块默认将 process() 方法返回的所有结果记录下来。它将被存储在数据库中,以供进一步分析。
任何返回 "false" 的任务将被标记为失败。
任何引发异常的任务将被标记为失败,异常将被存储为结果。这也带来了一个副作用,即允许即使在其中一个任务引发异常的情况下,也可以运行其他任务。
预定义的计划
如果您不喜欢 cron 语法,您也可以使用 SimpleJobSchedules 类中的任何常量,它为大多数常见的计划提供了合理的默认值。
class TestCron implements CronTask { /** * run this task every every day * * @return string */ public function getSchedule() { return SimpleJobsSchedules::EVERY_DAY; } /** * * @return void */ public function process() { echo 'hello'; } }
它还提供了两个方法:everyDay 和 everyWeek,允许您定义在特定的小时或周中的特定一天运行的任务。如果您有多个每日或每周任务,而且您不想同时运行它们(因为这可能会导致超时),这将很有用。
简单任务
本模块还包含一个有限的作业运行器功能,形式为SimpleTask
类。简单任务就是对给定DataObject
上的给定方法进行延迟调用的简单操作。您可以传递任意数量的可序列化为JSON的参数(例如,不是对象实例)。
$task = new SimpleTask(); $task->addToTask($this, "removeStuff", [ $some_stuff_id, ]);
一个简单任务可以调用任意数量的方法,这些方法在任意数量的对象实例上。请注意,SimpleJobsController
每次只会运行一个任务(每5分钟或更少,具体取决于您如何配置该模块),因此您可能希望将所有与特定流程相关的内容组合在一个简单任务中。
清理会话
由于我们拥有会话管理器,我们需要清理会话。
此模块会自动为您每天执行此操作。这可以被禁用
LeKoala\SimpleJobs\SimpleJobsDailyTask: clean_sessions: false
兼容性
测试了5+个版本
维护者
LeKoala - thomas@lekoala.be