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 协议》,转载必须注明作者和本文链接
本帖由系统于 6年前 自动加精
关于 LearnKu
这个思路可以
感觉cron不能直接支持秒级特别遗憾,现在我们的做法都是 用 artisan 命令,写个while循环!但是这样 while体太大,容易挂掉,然后再写一个定时任务(这次就是一分执行一次了),去检查artisan命令有没有挂掉,挂了就再拉起来
@Complicated 使用supervisord来维护进程而稳
@Complicated
你的场景会不会用异步队列更合适
@Kamicloud 其实就是自己写了一个简单的异步队列
方案一每分钟都执行新的脚本,那有多个脚本同时在刷任务,这脚本又不会自己结束,这也行?启动之后过了一天有86400个脚本在刷任务,是这样吗
@simplewater 细心,不过86400是秒数,86400 / 60
@Kamicloud 哈哈哈,是的,很6
@simplewater 一般的脚本都会结束,你说的是那种常驻内存型的,这个不应该使用 cron 定时器来了
@Cryven 嗯,有道理,脚本如果不自己结束的话,那正常使用cron每分钟执行一次,一样会造成累加脚本
刷任务的问题,是我没考虑好,感谢指点,主要看着while true 一下没反应过来,以为不会自己结束
经过测试,这个思路有坑。
每一秒都被执行了。
2023 的时候,用过 https://github.com/spatie/laravel-short-schedule,现在 Laravel 支持 everySecond 了