2024年最新php统一管理crontab_php crontab(1),Golang面试宝典pdf

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

* * * * * /usr/bin/php /project/yii test-cron/run

<?php
namespace console\controllers;

use yii\console\Controller;

class TestCronController extends Controller
{
    // yii脚本目录
    private $runnerScript;

    // 命令集合
    private $cronJobs = [];

    public function init()
    {
        parent::init();
        // 设置yii脚本目录,这里在最后添加了一个空格,方便后面与命令进行拼接
        $this->runnerScript = dirname(dirname(\_\_DIR\_\_)) . '/yii ';
        // 下面是要执行的计划任务,注意时间是不补0的数字
        $this->cronJobs = [
            'hello/index' => '\* \* \* \* \*',
        ];
    }

    public function actionRun()
    {
        // 格式化当前时间戳并转成 分 时 日 月 周 格式
        /\*
 |i 有前导零的分钟数 00 到 59>
 |G 小时,24 小时格式,没有前导零 0 到 23
 |j 月份中的第几天,没有前导零 1 到 31
 |n 数字表示的月份,没有前导零 1 到 12
 |w 星期中的第几天,数字表示 0(表示星期天)到 6(表示星期六)
 \*/
        $now = explode(' ', date('i G j n w', time()));
        $raw = $this->parseCron($this->cronJobs);
        foreach ($raw as $command => $cron) {
            // 上面已经列出了所有的情况,所以当前时间循环时如果有一项不符合则不能向下执行
            foreach ($now as $k => $piece) {
                if (!in\_array($piece, $raw[$command][$k])) {
                    continue 2;
                }
            }
            // 下面是调用系统函数执行shell命令
            $this->runCommandBackground($command);
        }
    }

    /\*\*
 \* 解析需要执行的命令
 \* @param $cronJobs
 \* @return array
 \*/
    public function parseCron($cronJobs)
    {
        // 解析后的数组
        $raw = [];
        foreach ($cronJobs as $command => $cron) {
            // $command -> hello/index $cron -> \*/5 \* \* \* \*
            // 将命令用空格分割成数组
            $cronArr = explode(' ', $cron, 5); // ['\*/5', '\*', '\*', '\*', '\*']
            // 针对每一个位置进行解析
            $dimensions = array(
                array(0, 59), //Minutes
                array(0, 23), //Hours
                array(1, 31), //Days
                array(1, 12), //Months
                array(0, 6),  //Weekdays
            );
            foreach ($cronArr as $key => $item) {
                // 标记是哪种命令格式,通过使用的crontab命令可以分为两大类
                // 1.每几分钟或每小时这样的 \*/10 \* \* \* \*
                // 2.几点几分这样的 10,20,30-50 \* \* \* \*
                list($repeat, $every) = explode('/', $item, 2) + [false, 1];
                if ($repeat === '\*') {
                    $raw[$command][$key] = range($dimensions[$key][0], $dimensions[$key][1]);
                } else {
                    // 处理逗号拼接的命令
                    $tmpRaw = explode(',', $item);
                    foreach ($tmpRaw as $tmp) {
                        // 处理10-20这样范围的命令
                        $tmp = explode('-', $tmp, 2);
                        if (count($tmp) == 2) {
                            $raw[$command][$key] = array\_merge($raw[$command][$key], range($tmp[0], $tmp[1]));
                        } else {
                            $raw[$command][$key][] = $tmp[0];
                        }
                    }
                }
                // 判断\*/10 这种类型的
                if ($every > 1) {
                    foreach ($raw[$command][$key] as $k => $v) {
                        if ($v % $every != 0) {
                            unset($raw[$command][$key][$k]);
                        }
                    }
                }
            }
        }


![img](https://img-blog.csdnimg.cn/img_convert/bbf0698db3c7f54155285241b603d167.png)
![img](https://img-blog.csdnimg.cn/img_convert/947c5d44ef1b6635911c1b2070eb824b.png)
![img](https://img-blog.csdnimg.cn/img_convert/4b656e495d7f41393a497591dc09a994.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.youkuaiyun.com/topics/618658159)**

多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.youkuaiyun.com/topics/618658159)**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值