Laravel 框架的应用程序的任务调度一般都会像下面这样写入 crontab 里
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
这是没任何问题的。但这样的默认最小执行时间是 1 分钟,可能就不是我们想要的。
如果要按照秒级来执行,要怎么做呢?
两个方案
-
使用 Shell 辅助
比如每 3 秒执行一次
run_second.sh
duration=3 #间隔的秒数 for (( i = 0; i < 60; i=(i+duration) )); do /usr/local/bin/php /path-to-your-project/artisan schedule:run sleep $duration done
然后将该脚本写入 crontab
* * * * * cd /path-to-your-shell-script/run_second.sh >> /dev/null 2>&1
-
把循环写入到任务调度里面
只需在自定义的
SomeCmd.php
文件的handle
方法加上循环即可。假设每 3 秒执行
for ($i=1;$i<=20;$i++){ // 你要执行的任务 sleep(3); }
为了不影响其它任务的执行,这条你需要单独拎出来写入 crontab
* * * * * /usr/local/bin/php /path-to-your-project/artisan SomeCmd
目前尚无回复