cron 秒级控制

场景

使用 crontab 每隔5秒执行一个脚本

纠正

crontab 最小调度单位是「分钟」,没法控制到「秒」.

*/5 * * * * /path/to/script

这里的 / 是指「步长」,意思是每隔5分钟执行一次脚本.

crontab 详细用法参考:Crontab 用法

方案

方案一

编写脚本

$ cat cron_seconds.sh
#!/usr/bin/env bash

while true; do
  SCRIPT # 脚本的执行路径
  sleep 5
done

cron 定时任务设置

* * * * * /path/to/cron_seconds.sh

方案二

$ crontab -l
* * * * * /path/to/script
* * * * * sleep 5;/path/to/script
* * * * * sleep 10;/path/to/script
* * * * * sleep 15;/path/to/script
* * * * * sleep 20;/path/to/script
* * * * * sleep 25;/path/to/script
* * * * * sleep 30;/path/to/script
* * * * * sleep 35;/path/to/script
* * * * * sleep 40;/path/to/script
* * * * * sleep 45;/path/to/script
* * * * * sleep 50;/path/to/script
* * * * * sleep 55;/path/to/script

如果觉得不错,可以给我一个 STAR.

本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 2年前 自动加精
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 11

这个思路可以

2年前 评论
Complicated

感觉cron不能直接支持秒级特别遗憾,现在我们的做法都是 用 artisan 命令,写个while循环!但是这样 while体太大,容易挂掉,然后再写一个定时任务(这次就是一分执行一次了),去检查artisan命令有没有挂掉,挂了就再拉起来

2年前 评论

@Complicated 使用supervisord来维护进程而稳

2年前 评论

@Complicated
你的场景会不会用异步队列更合适

2年前 评论
Complicated

@Kamicloud 其实就是自己写了一个简单的异步队列

2年前 评论

方案一每分钟都执行新的脚本,那有多个脚本同时在刷任务,这脚本又不会自己结束,这也行?启动之后过了一天有86400个脚本在刷任务,是这样吗

2年前 评论

@simplewater 细心,不过86400是秒数,86400 / 60

2年前 评论

@simplewater 一般的脚本都会结束,你说的是那种常驻内存型的,这个不应该使用 cron 定时器来了

2年前 评论

@Cryven 嗯,有道理,脚本如果不自己结束的话,那正常使用cron每分钟执行一次,一样会造成累加脚本
刷任务的问题,是我没考虑好,感谢指点,主要看着while true 一下没反应过来,以为不会自己结束

2年前 评论
游离不2

经过测试,这个思路有坑。

$schedule->command('test')->cron('*/2 * * * *');

每一秒都被执行了。

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!