[日常] crontab的秒执行和串行化和多进程实现

1. crontab的最低运行频率是,按照每分钟执行一次,通过在脚本中简单实现按秒级别运行

比如这条cron规则,每分钟执行一次脚本 

* * * * * PHP /var/www/html/test/cron.PHP

cron.PHP

Highlighter">
60) break;
        $pid=getmypid();
        //查询队列等任务
        file_put_contents("/tmp/cron_test","{$pid}=={$i}\n",FILE_APPEND);
        sleep(1);
}

2.

Highlighter">
rush:PHP;gutter:true;">120) break;
        $pid=getmypid();
        //查询队列等任务
        file_put_contents("/tmp/cron_test",FILE_APPEND);
        sleep(1);
}

3.处理crontab冲突,同一时间只允许一个任务执行,使用flock文件

如果一个任务超过了一分钟没执行完,下个任务开启时会检测文件是否已经被加了锁,如果加锁失败就不执行脚本了

认使用阻塞模式,就是其他进程会一直等待这个文件释放锁,释放后就立即执行

PHP /var/www/html/test/cron.PHP'

将命令作为 flock 的 -c 选项的参数。flock 命令中,-x 表示对文件加上排他锁,-c 选项指明加锁成功后要执行的命令。

模拟脚本超时

Highlighter">
rush:PHP;gutter:true;">rand(60,130)) break;
        $pid=getmypid();
        //查询队列等任务
        file_put_contents("/tmp/cron_test",FILE_APPEND);
        sleep(1);
}

  

下面的截图可以看到,第二个进程执行到了flock命令,但是没有执行到PHP脚本,阻塞在那里了.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...