narekps / php-cron
计划任务
Requires
- php: ^7.2 || ^8.0
- symfony/process: ^4.0|^5.0|^5.0
Requires (Dev)
- phpunit/phpunit: ^8.0 || ^9.0
README
此库允许您只有一个通用的crontab条目,该条目将触发多个不同的计划任务,这些任务可以通过此库定义。Cron库将决定任务是否需要运行。
注意:请确保将服务器crontab任务设置为正确选择的频率,因为如果有例如每分钟运行一次的计划任务在代码中定义,您的通用crontab任务也需要至少每分钟运行一次才能正常工作。
使用场景
假设您需要在应用程序中设置两个计划任务。一个是将文件夹内容写入日志文件,另一个是清空文件夹。此库允许您创建单独的脚本(例如:cron.php),在脚本中通知Cron库这两个计划任务。定义了具体细节的任务可以添加到解析器中,并给出运行命令。
您的服务器crontab可能如下所示
* * * * * /path/to/php /path/to/cron.php >/dev/null 2>&1
以下代码示例与该用例相匹配。
代码示例
<?php require_once(__DIR__ . '/vendor/autoload.php'); // Write folder content to log every five minutes. $job1 = new \Cron\Job\ShellJob(); $job1->setCommand('ls -la /path/to/folder'); $job1->setSchedule(new \Cron\Schedule\CrontabSchedule('*/5 * * * *')); // Remove folder contents every hour. $job2 = new \Cron\Job\ShellJob(); $job2->setCommand('rm -rf /path/to/folder/*'); $job2->setSchedule(new \Cron\Schedule\CrontabSchedule('0 0 * * *')); $resolver = new \Cron\Resolver\ArrayResolver(); $resolver->addJob($job1); $resolver->addJob($job2); $cron = new \Cron\Cron(); $cron->setExecutor(new \Cron\Executor\Executor()); $cron->setResolver($resolver); $cron->run();
Cron目前仅支持触发shell命令。这意味着您可以触发任何事情,虽然强烈建议不要调用Web URL。但如果你真的需要,这里有一些示例命令。
* * * * * /usr/bin/lynx -source http://example.com/cron.php
* * * * * /usr/bin/wget -O - -q -t 1 http://www.example.com/cron.php
* * * * * curl -s http://example.com/cron.php
安装
将以下内容添加到项目的composer.json中
$ composer require cron/cron
{ "require": { "cron/cron": "^1.0" } }
crontab语法
CRON表达式是一个表示特定命令执行计划的字符串。CRON计划的部分如下
* * * * * *
- - - - - -
| | | | | |
| | | | | + year [optional]
| | | | +----- day of week (0 - 7) (Sunday=0 or 7)
| | | +---------- month (1 - 12)
| | +--------------- day of month (1 - 31)
| +-------------------- hour (0 - 23)
+------------------------- min (0 - 59)
每个部分都支持通配符(*)、范围(2-5)和列表(2,5,6,11)。
贡献
所有代码贡献(包括有提交访问权限的人)都必须通过pull请求,并由核心开发者批准后才能合并。这是为了确保对所有代码的适当审查。
将项目分支出来,创建一个功能分支,并给我们发送一个pull请求。
为了确保代码库的一致性,您应该确保代码遵循我们从Symfony借来的编码标准。务必检查php-cs-fixer,这将非常有帮助。
如果您想帮忙,请查看问题列表。
要求
PHP 5.5.0或更高版本
作者和贡献者
Dries De Peuter - dries@nousefreak.be - http://nousefreak.be
还可以查看参与此项目的贡献者列表。
许可
Cron在MIT许可下发布。